2

ruby-1.9.3-p286在我的服务器上安装了 RVM,并ruby -v在终端中确认了它。

但是,按照RVM-Capistrano gem integration的说明,

set :rvm_ruby_string,  ENV['GEM_HOME'].gsub(/.*\//,"")
require 'rvm/capistrano'

而跑cap deploy,它还坚持跑ruby-1.9.3-p0,当然也找不着了。

在终端中手动打开 irb 并运行ENV['GEM_HOME'].gsub(/.*\//,"")返回ruby-1.9.3-p286,所以我很困惑为什么它一直要求ruby-1.9.3-p0.

有人遇到过类似的情况吗?

4

1 回答 1

1

我只是在为类似的问题而苦苦挣扎,在谷歌上搜索解决方案,并找到了您的问题。无论如何,就我而言,我已将 Ruby 版本指定为1.9.3-p327无处不在:在我的.bashrc文件(rvm --default use 1.9.3-p327.rvmrcrvm use 1.9.3-p327@my_app_namecap deploycap deploy:setup

*** [err :: localhost] ruby-1.9.3-p286 is not installed.
 ** [out :: localhost] To install do: 'rvm install ruby-1.9.3-p286'
*** [err :: localhost] Error: RVM was unable to use '1.9.3@my_app_name'

原来问题出在 Capistrano 的配置文件中,my_app_name/config/deploy.rb. 它定义了这样的 Ruby 版本:

set :rvm_ruby_string,           "1.9.3@#{application}"

为什么 Capistrano 把它变成这样1.9.3-p286对我来说仍然是一个谜。无论如何,我将 Ruby 补丁级别添加到该行,如下所示:

set :rvm_ruby_string,           "1.9.3-p327@#{application}"

然后cap deploy:setup开始cap deploy工作。

此外,我发现 Capistrano 已经添加了使用应用程序.rvmrc文件中给出的 Ruby 版本的可能性(请参阅this),因此您可以将该行设置为

set :rvm_ruby_string,           :local

并且永远不必再碰它,即使你在.rvmrc.

于 2012-11-23T11:09:49.937 回答