5

3 つの Web サーバーと 1 つのデータベース サーバー (AWS RDS サーバー) で Rails アプリを実行しています。Chef Solo でデプロイします。現在、rails_app レシピで「migrate true」を設定しており、「rake db:migrate」は各 Web サーバーで 1 回実行されます。

これは通常、移行が短い場合は問題になりません。(最初の Web サーバーは成功し、schema_migrations テーブルに最新のスキーマ バージョンがリストされているため、2 番目と 3 番目の Web サーバーはスキップされます。) しかし、移行に時間がかかる場合、2 番目と 3 番目の Web サーバーは、最初の Web サーバーが完了する前に移行を試みます。 . それらは失敗し、chef は正常に終了しません。移行は成功しましたが (少なくとも私が試したときは)、新しいバージョンの全体的な展開は失敗しました。(再度実行すると、移行が既に実行されているため、すべてが成功します。)

私の質問は、移行が1回だけ実行されるようにするための最良の/標準的な方法は何ですか?

4

3 に答える 3

0

3 つの Web サーバーの 1 つにリーダー ロールを作成し、そのロールでのみ db:migrate を実行します。

もう 1 つのオプションは、コードを dbserver にもデプロイし、そこで db:migrate を実行することです。

于 2016-07-21T16:19:13.050 に答える
0

db/migrate.rb ファイルの内容が変更されたかどうかを確認できます。その場合は、条件付きで migrate true を呼び出します。gitを使用している場合は、確認できます

「git diff HEAD@{1} HEAD db/migrate」を実行します

変更がある場合は、migrate true を使用してください。

于 2013-04-23T05:42:05.323 に答える