Pumaの構成ファイルの例では、on_restart関数について次のようになっています。
再起動する前に実行するコード。このコードは、ログファイル、データベース接続などを閉じる必要があります。
Railsアプリにこれを実装して、データベースとログファイルへの接続を閉じる必要がありますか、それとも自動的に処理されますか?そうでない場合、実際にすべてを行うにはどうすればよいですか?
Pumaの構成ファイルの例では、on_restart関数について次のようになっています。
再起動する前に実行するコード。このコードは、ログファイル、データベース接続などを閉じる必要があります。
Railsアプリにこれを実装して、データベースとログファイルへの接続を閉じる必要がありますか、それとも自動的に処理されますか?そうでない場合、実際にすべてを行うにはどうすればよいですか?
いいえ、そうではありません。Railsがコードの再読み込みを自動的に処理します。ただし、このコードの再読み込みのサポートには制限があります。たとえば、application.rbへの変更は、アプリサーバーを再起動するまで適用されません。
しかし、私はプーマよりもPhusionPassengerをお勧めします。Phusion Passengerは、特に本番環境に移行するときに、セットアップがはるかに簡単です。Phusion PassengerはApacheとNginxに直接統合され、動的ワーカー管理などの高度な機能を提供します。Phusion Passengerは非常に成熟していて、安定していてパフォーマンスが高く、New York Times、Symantec、AirBnBなどで使用されています。
Rails.cacheプロバイダーとしてRedisを使用すると、Rails / Pumaサーバーが再起動されるたびに、最初のリクエストでエラーページが発生することがわかりました。私が得たエラーは次のとおりです。
Redis :: AliExpressError(再接続せずに子プロセスからの接続を使用しようとしました。フォークした後にRedisに再接続する必要があります。)
このエラーを回避するために、on_restartには何も追加しませんでしたが、 on_worker_bootにコードを追加する必要がありました (workers = 4でPumaを実行しています):
puma-config.rb
on_worker_boot do
puts "Reconnecting Rails.cache"
Rails.cache.reconnect
end