2013-11-28 127 views
1

我试图让Capistrano在我的MacBook(OSX Mountain Lion)上工作,但我遇到了很多困难。它开始与它抛出一个错误:Capistrano使用旧的红宝石版本

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 

看来我有红宝石1.8安装和它不与Capistrano的正常工作(发现这个周围的Googling)。

所以我使用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宝石。所以我开始部署,并获得与我开始时一样的确切错误。

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

TL; DR;经过一番摸索之后,当我输入ruby -v时,它回到2.0版本,但是当我用Capistrano做cap deploy时,它尝试使用1.8版本的红宝石。我该如何解决?

回答

1

愚蠢的,但简单的出路将是完全删除RVM和两个ruby版本,然后再次从头安装。由于一些宝石尚未加速,我会推荐1.9.x以上2.0,但这取决于你。

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

+0

你说“Gemfile”,我说吧?我不是一个红宝石开发人员,所以不熟悉很多术语。我主要使用PHP编写,因为Capistrano需要使用Ruby。你知道为什么Capistrano抓取旧版本吗?它自己安装了多少个地方? –

+0

啊,理解。所以你正试图部署一个与capistrano的PHP应用程序?为什么不,我猜... 这个问题很可能是你的机器上安装的ruby版本是旧的(所以我假设你使用的是一个mac,因为他们带有一个旧的borked版本)。 我肯定会推荐卸载并重新安装ruby版本*和* RVM,然后重新安装RVM并通过RVM安装Ruby 1.9.x。 *然后*用卡皮斯特拉诺来做你的魔法,然后回来再回答这个问题。 –

+0

我想你的建议的问题是“卸载”红宝石。我只是删除/ Library/ruby​​文件夹?那么坐在/ etc/bin或/etc/local/bin...中的版本又有什么变化呢,假设Ruby在这些位置之一有什么? –