USR2 で Unicorn を再起動すると、production.rb 設定がリロードされないようです
-
28-10-2019 - |
質問
私は unicorn を実行しており、ダウンタイムなしで再起動できるようにしようとしています。
これまでのところ、すべて素晴らしいソースです。マスター プロセスがフォークして 4 つの新しいワーカーを開始し、古いワーカーを強制終了します。全員が満足しています。
スクリプトは次のコマンドを送信して unicorn を再起動します。
kill -s USR2 `cat /www/app/shared/pids/unicorn.pid`
表面的にはすべてがうまくいっているように見えますが、unicorn がproduction.rb をリロードしていないことが判明しました。(デプロイするたびに、 config.action_controller.asset_host
値を、プリコンパイルされたアセットを含む新しい CDN コンテナ エンドポイントに追加します)。
この方法で unicorn を再起動した後も、アセット ホストは古いリリースを指したままになります。を行う 本物 再起動(つまり:マスタープロセスを停止し、unicorn を最初から再起動すると、新しい設定の変更が反映されます。
preload_app
に設定されています true
ユニコーン設定ファイルにあります。
何かご意見は?
解決
私の推測では、ユニコーンは新しい運用ディレクトリではなく古い運用ディレクトリで再起動されているのではないかと思います。つまり、unicorn.rb の作業ディレクトリが <capistrano_directory>/current
, 、ユニコーンを再起動する前に、シンボリックリンクが行われていることを確認する必要があります。
これは、手動での停止と開始が機能する理由を説明します。おそらく、デプロイ後にこれを実行しているため、正しいディレクトリで起動されることになります。
デプロイプロセスのいつユニコーンを再起動しますか?新しいリリース ディレクトリが現在のディレクトリとしてシンボリックリンクされた後、USR2 シグナルが送信されていることを確認する必要があります。
これで問題が解決しない場合は、unicorn.rb とdeploy.rb の要点を確認してください。この問題のデバッグがずっと簡単になります。
他のヒント
それを念頭に置いて:unicorn.rb の作業ディレクトリは次のようになります。/your/cap/ディレクトリ/現在
ない なれ:File.expand_path("../..", ファイル)
ユニコーンと Linux のソフトリンクフォークエラーのため:ソフトリンクがうまく機能しません。
例えば:
cd current #current は別のディレクトリへのソフト リンクです。
... ...
作業ディレクトリを取得すると、「現在の」パスではなく絶対パスが取得されます。