2

編集: ここでの問題は、ローカル マシンで RVM を使用し、サーバーで rbenv を使用したことです。複数の ruby​​ インストールを管理している (または ruby​​ バージョンをアップグレードしたいがシステムを変更したくない) 場合は、すべての環境で RVM または rbenv のいずれかを使用することを強くお勧めします。 /編集

それでは、少し歴史から始めましょう。私は、Rails2 Web サイトを Rails3 にアップグレードしている最中です。Capistrano の deploy スクリプトを除いて、ほとんどのものは今のところ適切に機能しています。私が持っている現在のセットアップは次のとおりです。

  • ローカルにインストールされた RVM (1.14.1)
  • ruby-1.9.3-p194 (プロジェクトのフォルダに設定)
  • RVM gem としてインストールされた Capistrano v2.12.0 (2.6.0 からアップグレードされましたが、2.6.0 でも動作しません)
  • rvm-capistrano (1.2.2)、Gemfile に追加 (オンラインおよび SO でいくつかの読み取りを行った後)
  • サーバーにインストールされたrbenv(グローバルに使用されるruby 1.9.3p194を使用)

(今までに、意味をなさないものを見たら、私に知らせてください)

デプロイ スクリプトは何も変更されていませんが、テスト サーバーにデプロイしようとすると ( betaと呼びましょう)、次のエラーが発生します。

* 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 に関連しているのかどうかさえわかりません。オンラインで調べただけです。

ありがとう

4

1 に答える 1

1

正しく動作するために、rbenv は提供する shim ですべての ruby​​ および gem 関連の実行可能ファイルをオーバーライドする必要があります。

通常、これは起動スクリプトで行われます (これが、サーバーにログインしたときに機能する理由です) が、Capistrano はシェルなしでログインするため、これらのスクリプトは実行されません。

deploy.rb に以下を追加する必要があります。

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

サーバーでrvmに関連するものは何も使用しないでください。rbenvとrvmは本当にお互いが好きではありません

PS : このトピックに関するもう少しの説明: http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

于 2012-06-30T19:57:02.047 に答える