2012-06-30 69 views
2

編輯: 這裏的問題是,我在本地機器上使用RVM和在服務器上使用rbenv。如果你正在管理幾個ruby安裝(或者升級你的ruby版本,但不想改變系統),那麼這是非常不推薦的,在所有環境中使用RVM或rbenv! /EDITCapistrano部署失敗與耙運行(rails3 + rvm)

所以我會用一些歷史開始: 我在提升我們的rails2網站Rails3中的過程。除Capistrano的部署腳本外,大部分事情現在都在正常運行。 當前的設置我已經是:

  • RVM本地
  • 紅寶石1.9.3-P194(設置爲項目的文件夾)
  • Capistrano的v2.12.0安裝(1.14.1)(從2.6升級2.0,但它不能在2.6.0工作以及)安裝爲RVM寶石
  • RVM-Capistrano酒店(1.2.2),加入到Gemfile中(在網上做一些閱讀後和SO)
  • rbenv(全球使用紅寶石1.9.3p194)安裝在服務器上

(到現在爲止,如果你看到任何沒有意義的,請讓我知道)

沒有在部署腳本改變,但是當我嘗試部署到我的測試服務器(姑且稱之爲公測)我得到這個錯誤:

* executing `deploy:restart' 
* executing "cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers" 
     servers: ["208.0..."] 
     [208.0...] executing command 
    *** [err :: 208.0...] rake aborted! 
    *** [err :: 208.0...] no such file to load -- bundler/setup 
    *** [err :: 208.0...] /home/foo/bar/releases/20120630161947/Rakefile:5 
    *** [err :: 208.0...] (See full trace by running task with --trace) 
    ** [out :: 208.0...] (in /home/foo/bar/releases/20120630161947) 
     command finished in 1183ms 
    failed: "sh -c 'cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers'" on 208.0... 

上deploy.rb相關部分看起來是這樣的:

task :restart do 
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} queue:restart_workers" 
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} db:migrate" 
    run "touch #{deploy_to}/current/tmp/restart.txt" 
    end 

不用說,rake RAILS_ENV=beta queue:restart_workers'作品當在服務器上手動運行時是完美的。此外,應用程序被部署(代碼從git複製,它只是部署的最後一部分失敗)。

最後,錯誤並沒有改變,因爲在我安裝rvm-capistrano並添加到Gemfile之前,所以我甚至不確定它是否與rvm有關,我只是從在線觀看而猜測。

感謝

+0

我不認爲你想同時使用rbenv和rvm--它們都是管理多個ruby版本的方式。 –

+0

我有多個ruby版本。我從紅寶石1.8.7 + rails 2.3.2升級,並且我知道不建議更改本機ruby操作系統安裝(aka on/usr/bin/ruby​​)。 – Amir

+1

rvm和rbenv都用於管理ruby版本,並且它們都以稍微不同的方式進行操作。同時使用兩者似乎是在向我求助麻煩。 rvm-capistrano可能會設置使用任何rvm認爲是目前的ruby,而不是什麼rbenv認爲 –

回答

1

爲了正常工作,rbenv必須重寫它提供了墊片的所有寶石和寶石相關的可執行文件。

通常,這是通過啓動腳本完成的(這是爲什麼它在登錄到服務器時會工作),但Capistrano在沒有shell的情況下登錄,因此不會運行這些腳本。

您必須添加以下到您的deploy.rb:

set :default_environment, { 
    'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" 
} 

並且不使用你的服務器,rbenv和RVM相關的任何RVM真的不喜歡對方

PS:一點點更多關於此主題的解釋:http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

+0

謝謝,這工作完美。 – Amir