2012-07-03 11 views
13

Mam następującą konfigurację w Windows Azure:Azure: Najlepsze Praktyki Badań w środowisku próbnym z kod najpierw Migracje

  • A „test” hostowana usługa podłączony do własnej bazy danych „test”.
  • Usługa "produkcyjna" związana z własną "produkcyjną" bazą danych.

Po zweryfikowaniu wersji testowej i przygotowaniu do produkcji, rozpoczynamy wdrożenie "testowe" w usłudze hostowanej w trybie produkcyjnym i przeprowadzamy szybki test dymu, aby upewnić się, że nowa kompilacja nie jest dostępna. całkowicie zepsuty. Instancja pomostowa jest wdrażana z dokładnymi bitami, które zostaną wdrożone do produkcji, więc rozmawia z produkcyjną bazą danych. Kiedy etapy są pobłogosławione, trafiamy na przycisk "VIP Swap", a kompilacja jest realizowana podczas produkcji. Wszystko jest dobrze.

Problem pojawia się, gdy zmienia się model bazy danych. Mam doskonale działające Code First Migrations. Mogę dodawać nowe migracje, stosować je lokalnie przy użyciu konsoli menedżera pakietów, a następnie generować skrypty SQL w celu uaktualnienia testowej bazy danych, gdy przeprowadzę test nowej wersji. Pytanie brzmi: jaka jest najlepsza praktyka w korzystaniu z Code First Migrations wraz z wdrożeniami etapowymi/produkcyjnymi? Kiedy wdrażam nową kompilację do pomostu ze zmianami modelu, spodziewa się znaleźć bazę danych, która pasuje do jej modelu. Ale jeśli zastosuję zmiany modelu do produkcyjnej bazy danych, instancja produkcyjna narzeka, ponieważ jej model się nie zgadza.

Właśnie przeskakiwałem próbny test dymu. Przesyłam do postoju, a następnie aktualizuję bazę danych produkcji i niemal jednocześnie wciskam przycisk "VIP Swap". Następnie test dymu na produkcji. Jeśli coś jest poważnie uszkodzone, "Swap VIP" przywróć i przywróć zmiany w bazie danych.

Czy istnieje lepszy sposób, aby to zrobić, czy jest to prawie tak?

Dzięki!

+0

Mam ten sam problem, jedyne co mogę myśleć teraz jest wyłączenie automatycznego „upgrade do najnowszej”, lub rozwinąć własną DbMigrator jeśli istnieją pewne sposób na rozróżnienie między inscenizacją a produkcją. Najlepszym sposobem byłoby zaatakowanie bazy tymczasowej, która mogłaby zostać poddana aktualizacji, a następnie, gdy zamienisz docelową inną bazę danych, ale ponieważ nic się "nie dzieje" podczas wymiany, nie widzę, jak to powinno się stać. – FRoZeN

+0

To jest naprawdę zepsute. Inscenizacja i migracje są niezgodne. Nie ma sposobu na migrację i rozgrzanie serwera pośredniczącego przed zamianą. Serwer WWW produkcji przestaje działać zaraz po zastosowaniu migracji. Zakładam, że struktura podmiotu byłaby w stanie obsłużyć progresywne zmiany (np. Dodając tabelę). Wygląda na to, że jedynym sposobem na zrobienie tego jest osobna baza danych pośrednich. –

Odpowiedz

0

Nie jestem pewien co to jest najlepsza praktyka, ponieważ nie mogłem znaleźć i wydaje się, że użytkownicy używają tego, co jest najlepsze dla ich projektu i dla nich pracuje. W jednym scenariuszu rozwiązanie było podobne do twojego planu, jak opisałeś, podczas gdy DB produkcji ws jest pusta, a baza danych staging została stworzona z pierwszym kodem EF i zastosowana jest migracja. Po zakończeniu testu skrypty zostały przeniesione do innej bazy danych, która później była związana z produkcją.

+0

Dzięki. Miałem nadzieję, że brakuje mi magii, ale wydaje mi się, że tak nie jest. – ManicBlowfish

0

Pracuję na platformie Azure, EF itp. I podobnych tematach, takich jak Ty. Nie wiem, jaka jest najlepsza praktyka dla twojego scenariusza w tej chwili. Uważam jednak, że używanie narzędzi ciągłej integracji TFS i/lub Github ma sens, aby zminimalizować ryzyko wdrożenia. Mam nadzieję, że poniższy artykuł zapewni ci punkt widzenia.

Click here

Powodzenia