【Rails×Capistrano】Gemfile not found (Bundler::GemfileNotFound)
解決方法
app/config/unicorn/production.rb
に下記を追記
before_exec do |server| ENV["BUNDLE_GEMFILE"] = File.join(File.expand_path("../../../../", __FILE__), "current", "Gemfile") end
ローカルにて下記コマンドでunicornをSTOPしてSTARTしてあげる。
$ bundle exec cap production unicorn:stop $ bundle exec cap production unicorn:start
原因
deployを何度もやっていると、急にGemfileが読み込まれなくなり、再起動できなくなることがある。
app/config/unicorn/production.rb
にて、 preload_app true
を設定している場合に起こりうるらしい。
preload_app trueとは、ほっとホットデプロイ、緩やかなデプロイとよく言われるらしい。USR2。ググればたくさん出てくる。
この時点でENV[“BUNDLE_GEMFILE”]にはRAILS_ROOT/releases/日付的なやつ/Gemfileが入ってしまうので、これをunicornプロセスが覚え続けてしまう。
そうすると、そのうちSIGUSR2がなげられても、一旦BUNDLE_GEMFILEの方にGemfileを確認してしまうので、既に存在しないGemfileを確認にいってしまう。