Capistrano: 環境変数の設定 (メモ)
今日、Capistrano で Rails 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 を設定すれば解決することが分かりました。