私は、ラックの上にSinatraアプリケーションを実行しているいくつかのマシンを稼働させています。通常は、サーバーの変更を同期するために使用しているPuppetがプロジェクトのGemfile.lockが変更され、結果としてbundle install --binstubs --deployment
コマンドを発行して新しい宝石を入手する必要があることに気付くまで、すべてが大変です。この場合、新しいGemがまだインストールされていないため、ANY httpリクエストはBundlerに呼び出して宝石を要求すると500エラーが発生します。Rack: `bundle install --deployment`中のBundler :: GemNotFoundエラー
通常、サーバが稼動していることを定期的に確認する別のプロセスがあるため、少なくとも1つのRackプロセスがハングアップしていますが、この場合、Rackプロセスは稼働していません。 PassengerMinInstances
ディレクティブは、問題が新しいインスタンスにあった場合に役立つかもしれませんが、定期的にページを取得してサーバーがまだ稼動していることをテストするプロセスがあるため、少なくとも1つのRackプロセスがまだ稼動していなければなりません要求。
bundle install
が完了するまで、人形は実際にはRackを再起動しません(touch
によってrestart.txtファイルが作成される)ので、私たちのRackプロセスがこれで離れる理由はわかりません時間。誰もこれに遭遇しましたか?私が見落としてきたすべての要求に対して、環境全体をリロードしないラックオプションがありますか?
興味深い。あなたがアプリケーションの完全なチェックアウト(そして、おそらく依存する宝石も同様)ごとに配備することを気にしなければ、それは悪い解決策ではありません。あなたが定期的に展開するならば、それは帯域幅の多くですが、... – tjarratt