表題の通りなんだけど、 capistrano で何回目かのデプロイで puma が止まることがあって、いろいろ調査をしたら、6回目のデプロイで puma が止まることがわかりました。
「6回目」というのは、 capistrano がデプロイ先のサーバーに保存する世代の数が「5」だった場合(初期値が「5」)に、一番古い世代を削除するタイミングが「6回目」で、そのタイミングで puma の設定ファイルが Gemfile を見失うのが原因でした。
下記は unicorn の場合だけど、全く同じ症状でした。
capistrano + unicornではまった。 – blog unlearned
上記ページにもあるけど、
/home/username/.rvm/gems/ruby-2.2.2/gems/bundler-1.13.6/lib/bundler/definition.rb:31:in `build': /path/to/app/releases/{日付+時間}/Gemfile not found (Bundler::GemfileNotFound)
from /home/username/.rvm/gems/ruby-2.2.2/gems/bundler-1.13.6/lib/bundler.rb:127:in `definition'
from /home/username/.rvm/gems/ruby-2.2.2/gems/bundler-1.13.6/lib/bundler.rb:93:in `setup'
from /home/username/.rvm/gems/ruby-2.2.2/gems/bundler-1.13.6/lib/bundler/setup.rb:20:in `'
from /home/username/.rvm/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /home/username/.rvm/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
みたいなエラーが発生して、 puma が止まってしまいます。
修正方法としては、 /path/to/app/config/puma/production.rb
みたいなファイルがあるとして、
on_restart do
ENV['BUNDLE_GEMFILE'] = '/path/to/app/current/Gemfile'
end
を追加することで直りました。
たくさんググったけど、意外と誰も書いてなさそうだったので、書きました。どなたかのご参考になれば幸いです。
参考
https://github.com/puma/puma/blob/master/examples/config.rb
2018年2月15日 追記
on_restart
のタイミングじゃなくて、普通に ENV['BUNDLE_GEMFILE'] = '/path/to/app/current/Gemfile'
を書くだけで問題ないことを確認しました。