Capistranoでunicornを使ったアプリをデプロイしているとBundler::GemfileNotFound
という例外があがることがあるらしい*1
どうやらBUNDLE_GEMFILE
がreleasesのある時点でのGemfileのパスを保持したままデプロイを重ねて、そのファイルがtruncateで削除されてたのが原因とのこと。
自分のところではまだ再現していないけど、次のコードをunicornの設定ファイルに追記して対応しておいた。
config/unicorn/production.rb:
current_path = "/path/to/project/current" before_exec do |server| ENV['BUNDLE_GEMFILE'] = "#{current_path}/Gemfile" end
ちなみにbefore_exec
に登録したブロックは新しいマスタープロセスを立ち上げる直前に呼ばれるので、そこからforkして派生するワーカにも適用される。