2013-11-28 124 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在這些位置之一有什麼? –