Railsアプリ( deploy_revisionを使用)をデプロイするためにCapistranoからChefに移動していますが、ベストプラクティス(または一般的なプラクティス)の問題がわかりません。グーグルであまり見つけられませんでした。
Capistranoと「プッシュ」モデルを使用すると、アプリケーションを複数のサーバーにデプロイするときに、デプロイメントの失敗がいつ発生したかを簡単に認識し、すべてのサーバーに一度にデプロイメントをロールバックできます。Capistranoはまた、各アプリサーバーにメンテナンスページを表示し、すべてのサーバーに正常にデプロイするか、デプロイメントをロールバックしない限り、そのメンテナンスページを削除しません。
Chefと「プル」モデルでは、各サーバーがわずかに異なる時間に更新をフェッチしている可能性があります。データベースサーバーがアプリケーションコードを更新し、アプリケーションサーバーよりも数分早くデータベース移行を実行することになりかねません。したがって、障害を特定し、ビルドが(すべてのサーバーで)最後に正常にデプロイされたバージョンにロールバックされることを確認するための優れた方法は本当にありません。
私はここにいくつかのオプションがあることを知っています:
- chef-clientをデーモン化しないでください。cronを使用して毎晩または毎時実行します。(一部のサーバーが成功し、1つだけが問題に遭遇した場合でも、すべてのサーバーにロールバックすることはできません。)
- chef-clientをデーモン化しないでください。deploy_revisionは使用しないでください。ナイフsshまたはcapistrano-chefを介して実行します。(シェフの魅力の一部である「プル」モデルではなく、「プッシュ」モデルに戻りました。)
- chef-clientをデーモン化し、相互に通信するカスタムレシピを作成します。(熱心ではありません。)
- リラックス。ご心配なく。エラーを発生させてから修正します。(ここでもわくわくしません。)
これらのいずれかを構築し始めることができましたが、構築に多くの時間を費やす前に、フィールドでの大規模な展開で何が機能したかを知りたいと思っていました。あなたは何をした?