Capistrano: 環境変数の設定 (メモ)

今日、CapistranoRails 3.1 ベースの Web アプリをリモートにデプロイする準備をしていた時のこと。

deploy:restart の後に delayed_job のプロセスを再起動したかったので、


require "delayed/recipes"

...

after "deploy:restart", "delayed_job:restart"

というコードを config/deploy.rb に加えたのですが、うまく動きません。

エラーメッセージは次の通り:


Could not find rake-0.9.2 in any of the sources (Bundler::GemNotFound)

実は、リモートホストには bundler が2つインストールされていて、私としては /opt/ruby/bin/bundle を実行したかったのですが、PATHの通っている /usr/local/bin/bundle が起動してしまうのが原因のようでした。

そこで、delayed_job:restart タスクを


run "cd #{current_path}; RAILS_ENV=#{rails_env} /opt/ruby/bin/bundle exec script/delayed_job restart"

と書き換えてみましたが、エラーは消えません。

その後、Google検索を活用しつつ試行錯誤したところ


default_environment['PATH'] = '/opt/ruby/bin:${PATH}'

のように環境変数 PATH を設定すれば解決することが分かりました。