関連コンテンツ

表題の通りなんだけど、 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' を書くだけで問題ないことを確認しました。

関連コンテンツ

スポンサーリンク