TLDR:Azure Deployment-Slots und Datenbankmigrationen
Wie kann eine Anwendung in einem Staging-Slot ausgeführt werden wissen, dass es in der Inszenierung ist und zu einer Testdatenbank/run-Migrationen auf der Testdatenbank verbinden? Und wie kann dieselbe App im Staging-Slot automatisch erkennen, dass sie in den Live-Produktions-Slot getauscht wurde und nun für den Live-Geschäftsbetrieb verantwortlich ist? (So kann es zur Verwendung von Live-db wechseln, wandern Live db etc.)
Lange Version:
Das Thema teilweise von dieser Frage bedeckt ist: Azure Web App deployment slots with database migration
aber ich habe wirklich nicht meine Antwort bekommen dort ..
Meine App verwendet FluentMigrator, initiiert von einem Ereignis/Code, wenn die App initialisiert wird, um Datenbankmigrationen auszuführen. MSBuild verwendet, es zu tun, aber jetzt bin ich ziemlich sicher, dass es
programmatisch genanntEs scheint am sinnvollsten für:
- Produktion ein Slot-basierte App Einstellung zu haben, die den Code an der Produktion db Punkte
- Inszenierung eine Schlitz-Basis haben App-Einstellung, die den Code an der Inszenierung db Punkte
ich kann keine andere Möglichkeit sehen, für die Produktion funktionsfähig zu bleiben, während Inszenierung bewiesen wird, wenn Staging-Migrationen hat, dass Wrack die DB für Produktion u Verständnis; die zwei DBs müssen getrennt sein
Also, wenn die DBs getrennt sind, ist die einzige (fast) Null Ausfallzeit Weg der Welt auf die Verwendung des Codes in der Staging-Slot ist, wenn der Schalter bewirkt, dass die App sich reinitialisieren und ändert es so, dass es auf den Produktions-DB zeigt, dann kann fluentmigrator (der auch erneut aufgerufen werden sollte) die gleiche Menge von Migrationen auf die Produktion anwenden und der Code im Staging führt das Geschäft für eine Weile auf der Produktions-Datenbank aus.
..Produktion Codebase wird aktualisiert und der Austausch erfolgt. Produktionscode migriert niemals die Produktionsdatenbank, da sie bereits durch den Staging-Code aktualisiert wird, wenn die neue Version in der Produktion startet
Die einzige andere Art, wie ich Dinge vorhersehe, ist zwei DBs, zwei Slots und Sie nie einen Tausch durchführen; Sie implementieren nur die Staging-Datenbank, sie aktualisieren die Staging-Datenbank, Sie testen und beweisen, Sie implementieren in der Produktion, sie aktualisiert die Produktdatenbank, Sie verifizieren die App-Funktion .. und die Welt hat eine geringe Ausfallzeit erlitten, oder eine größere Menge, wenn der Build fehlgeschlagen ist)
Gibt es einen Mechanismus für den ehemaligen? Wie kann die App bei einem Tausch auf eine neue Datenbank verweisen und wie können Migrationen erneut ausgeführt werden?
Wenn letzteres der einzige Weg ist, dann könnten auch Deployment-Slots einfach eine andere Web-App sein, oder? Eine Web-App für die Staging und eine Web-App für prod, um jede Verwirrung Slots zu verursachen, weil sie im Portal vertreten sind.
Am Ende des Tages Slot ist nur eine andere Web-App. Sie können die App-Einstellungen verwenden, um die db an einen bestimmten Steckplatz anzulegen. –
Beantwortet die Frage nicht wirklich - während ich weiß, dass ein Slot nur eine andere Web-App ist, die eine "Click-to-Tausch-Verantwortung" -Rolle mit einer Produktions-App genießt, möchte ich wissen, welche Mechanismen existieren, damit sie ihre beabsichtigte Funktion erfüllt in einem Kontext, in dem Datenbankmigrationen existieren –