Capistrano使用旧的Ruby版本

时间:2013-11-28 01:02:41

标签: ruby macos capistrano

我正在努力让Capistrano在我的MacBook(OSX Mountain Lion)上工作,但我遇到了很多困难。它开始时抛出一个错误:

cillosis:myapp macbook$ cap deploy
/Library/Ruby/Gems/1.8/gems/sshkit-1.2.0/lib/sshkit.rb:32: undefined method `require_relative' for main:Object (NoMethodError)
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Library/Ruby/Gems/1.8/gems/capistrano-3.0.1/lib/capistrano/all.rb:2
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Library/Ruby/Gems/1.8/gems/capistrano-3.0.1/bin/cap:2
from /usr/bin/cap:19:in `load'
from /usr/bin/cap:19

似乎我安装了Ruby 1.8并且它与Capistrano无法正常工作(发现这个谷歌搜索)。

所以我使用rvm安装了Ruby 2.0。 RVM开始抛出一堆错误,所以我使用rvm implode摆脱它,发现2.0版本仍在我的计算机上。我检查了 $ PATH ,它指向的位置包含Ruby 1.8。所以我将其重命名为* ruby​​_old *并将新的ruby复制到该文件夹​​( / usr / bin )。然后,当我做了ruby -v时,它又以版本2.0的形式返回。所以我想,很好,现在我们终于可以运行Capistrano了。

为了确定,我做了一个gem update,因为更新了以前抛出错误的 sshkit gem。所以我去部署,并得到与我开始时相同的错误。

我知道 deploy.rb 脚本是正确的,因为我一直在另一台Mac上使用它。

TL; DR;在一些摸索之后,当我输入ruby -v时,它会返回使用版本2.0,但当我使用Capistrano执行cap deploy时,它会尝试使用版本1.8的ruby。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

愚蠢但简单的方法是彻底删除RVM和两个ruby版本,然后从头开始重新安装。由于某些宝石尚未达到速度,我建议1.9.x超过2.0,但这取决于你。

另一种选择是在gemfile中指定ruby版本(如heroku所做的那样),然后执行“bundle exec cap deploy”。再一次,没有保证 - 但它可能会迫使capistrano按照你想要的方式行事,直到找到合适的解决方案。