ruby-on-rails – 为什么在使用rake调用heroku toolbelt CLI时会获得RubyVersionMismatch?

我正在尝试从rake任务执行heroku CLI:

1 task :call_heroku do     
  2   `heroku pgbackups:url --remote staging`
  3 end

bundle exec rake call_heroku返回以下输出

/home/joe/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.1/lib/bundler/
deFinition.rb:390:in `validate_ruby!': Your Ruby version is 1.9.3,but your 
Gemfile specified 2.1.0 (Bundler::RubyVersionMismatch)
            from /home/joe/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.1/lib/
bundler.rb:116:in `setup'
            from /home/joe/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.1/lib/
bundler/setup.rb:17:in `<top (required)>'
            from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
            from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        --remote staging

从命令行执行heroku pgbackups:url –remote staging将返回预期的URL.我的rvm或heroku CLI配置有问题吗?

环境细节:

Rails 3.2.17

Heroku的:

joe@warpaint ~/dev/project (master) $heroku version
heroku-toolbelt/2.39.0 (i686-linux) ruby/1.9.3

RVM:

joe@warpaint ~/dev/project (master) $rvm version

rvm 1.25.22 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>,Michal Papis <mpapis@gmail.com> [https://rvm.io/]


joe@warpaint ~/dev/project (master) $rvm list

rvm rubies

   jruby-1.7.1 [ i386 ]
   ree-1.8.7-2012.02 [ i686 ]
   ruby-1.8.7-p374 [ i686 ]
   ruby-1.9.2-p320 [ i686 ]
   ruby-1.9.3-p0 [ i686 ]
   ruby-1.9.3-p362 [ i686 ]
   ruby-1.9.3-p392 [ i686 ]
   ruby-1.9.3-p448 [ i686 ]
   ruby-1.9.3-p484 [ i686 ]
   ruby-2.0.0-p0 [ i686 ]
 * ruby-2.0.0-p247 [ i686 ]
   ruby-2.0.0-p353 [ i686 ]
   ruby-2.0.0-p451 [ i686 ]
   ruby-2.0.0-preview2 [ i686 ]
=> ruby-2.1.0 [ i686 ]
   ruby-head [ i686 ]

# => - current
# =* - current && default
#  * - default

ruby:

joe@warpaint ~/dev/project (master) $ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [i686-linux]

解决方法

事实证明这是一个捆绑问题.一些挖掘引发了我这个问题:
https://github.com/bundler/bundler/issues/2355,由@indirect解决,并使用Bundler.with_clean_env(此命令为 more)提及.

现在,上面的任务变为:

1 task :call_heroku do     
  2   Bundler.with_clean_env { p `heroku pgbackups:url --remote staging` }
  3 end

一切都很好!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...