1

現在、いくつかのデプロイメントスロット(デベロッパー、ステージング、プロダクションなど)を持つウェブアプリケーションを実行しています。すべてのスロットはデータベース(db_dev、db_staging、db_production)に接続されています。私はステージングスロットに展開し、その後プロダクションに切り替える必要があります。ここでデータベースの移行はどのように行われますか?Azure Web Appデプロイメントスロット(データベース移行あり)

私はdb_stagingが更新されたステージングにdb migrationsを使用して新しいビルドをデプロイするとします。スロットを切り替えるとどうなりますか?移行はdb_productionに適用されますか?ダウンタイムはどうですか?

私の理解では、URLだけが切り替わるので、スイッチの後にステージングスロットのアプリケーションはdb_productionを指していますか?それは意味をなさない。

私はステージングスロットにデプロイし、db_production(マイグレーションあり)をポイントすることができましたが、dbが更新され、ライブスロットでアプリが破損する可能性があります。

答えて

1

接続文字列をソースコードにハードコードする代わりに、アプリケーションサービス設定の接続文字列セクションに配置し、環境変数としてアクセスします。どんな環境でもただ1つのコードを持つことができ、スワップするかどうかにかかわらず、設定を「スロット設定」としてチェックすることで、設定が固定されたままになるので、安全です。

enter image description here

詳細:

https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

更新

データベース更新の場合は、するために実行する必要がある、すなわち、必要なスクリプト新しいアプリケーションバージョンのデータベーススキーマを更新するには、web.configのapplicationInitializationセクションを使用します。通常はアプリのウォームアップに使用されますが、あなたのケースでも動作するはずです。このコードは、基本的にアプリに生産トラフィックを許可されたスワップ処理を終了する前に完了するまで

<system.webServer> 
    <applicationInitialization > 
    <add initializationPage="/init-script.php" hostName="xxxxxx.azurewebsites.net"/> 
    </applicationInitialization> 
<system.webServer> 

AppInitモジュールが待機します。基本的なロジックは、データベースが期待されるバージョンを実行しているかどうかをチェックすることであり、それ以外のロジックがない場合は順番に実行されます。

+0

すべてのスロットには独自の設定がありますが、dbの移行はどうですか?彼らはどのように適用されますか?マイグレーションを使用してステージングにデプロイすると、ステージングdbは更新されます。プロダクションデータベースはどのように更新されますか?そして、私のコード内の変数にはどうすればアクセスできますか?現在私はweb.configを使用しています。事前に感謝します – user3838018

+0

あなたのアプリケーションのために実装する必要があるカスタムロジックですので、自動方法はありません。可能性のある回避策を使ってアップデートを投稿しましたが、この目的のために使用したことはありません。 –

1

私もこれを考えてきた、と私の知る限りでは、次のように唯一の賢明なプロセスである見ることができるよう:

  1. 停止はpreliveのstites
  2. クローン新しいステージングDBに戻ってDBを生きる
  3. このデータベースを指すようにステージングスロットのスティッキー接続文字列を変更してください。
  4. DBUP aganstステージングDBを実行しました(今アップグレード版です)ステージングスロットへのライブっぽいのシオン)
  5. 展開はライブに対して実行関数dbup(DB
  6. ライブ
  7. 満足バックアップまで
  8. 再起動はpreliveサイト
  9. テストステージング彼らは非改行変更されている場合、サイトすることができます
  10. スワップライブとはpreliveスロット)まで滞在
  11. チェックライブ

dbアップデートを壊さないようにすることができれば、スロットを元に戻すことでロールバックを簡単に行うことができます。そうでない場合は、ロールバックスクリプトやスナップショットの復元に慣れています。

関連する問題