multistage 環境を使う capisrano-unicorn 使いはいますぐ 0.1.7 に上げよう

capistrano + ext/multistage で capistrano-unicorn を使っている人で、
よくわからないけど

set :rails_env, "staging"
set :app_env, "staging"
set :unicorn_env, "staging"

って書かないと unicorn がうまく動かないと思ったことがある人こんにちは、tk0miya です。

冗長だけど、こんな風に rails_env, app_env, unicorn_env のそれぞれを同じ値にセットしないとうまく動かないんですよね。
app_env, unicorn_env の設定をサボると、unicorn 起動のコマンドラインが

  * executing "cd /home/app/myapp/current && BUNDLE_GEMFILE=/home/app/myapp/current/Gemfile bundle exec unicorn -c /home/app/myapp/current/config/unicorn/production.rb -E production -D"

みたいになって、なぜか production モードで起動してしまう。

僕もつい最近までこれを知らずにはまってしまいました。調べてみるといろんな人がはまっていたようですね。
また、公式 wiki にもこんなことが書いてありました。

コードを読むと :app_env, :unicorn_env の評価が multistage:ensure 以前に行われるため、
config/deploy/*.rb で rails_env を書き換えても反映されないという問題だったようです。

0.1.7 リリース

パッチ投げようかと github を覗いてみたら、つい一ヶ月ほど前(2013/3/21)に 0.1.7 がリリースされており、
その中に app_env と unicorn_env の遅延評価の修正も含まれているようです。

というわけで、ここらへんでハマって冗長な設定をしている方は capistrano-unicorn 0.1.7 に上げてみてはいかがでしょうか。