6

Mój zespół w ciągu ostatnich kilku lat coraz bardziej zyskiwał na CMS. Stajemy się również coraz bardziej w ciągłą integrację. Pogodzenie tych dwóch okazało się trudne. Aby było jeszcze gorzej, robimy witryny LAMP i .NET, aby nasze skrypty idealnie pasowały do ​​obu.Zautomatyzowane wdrożenia baz danych z treściami tworzonymi przez użytkowników (a la CMSes)

Mamy cztery środowiska dla każdej lokacji lokalnej, integracji, tworzenia i produkcji. Wprowadzanie treści i wysyłanie plików regularnie odbywa się w miejscu produkcji. Rozwój oczywiście zaczyna się lokalnie i idzie w górę.

Jakie są niektóre metody i techniki, które mogę wdrożyć na moim serwerze kompilacji, aby automatycznie przekazywać dane i aktualizacje schematów ze środowisk programistycznych do produkcji bez nadpisywania treści generowanych przez użytkowników? Odwrotnie, w jaki sposób (i kiedy) mogę automatycznie pobierać dane generowane przez użytkownika do środowisk programistycznych?

Odpowiedz

1

Będziesz mieć 3 rodzaje rzeczy w bazie danych, o które musisz się martwić.

1) Schemat, który można zdefiniować w DDL. 2) Dane statyczne lub wyszukiwane, które można zdefiniować w DML. 3) Dane dynamiczne (lub użytkownika), które również można zdefiniować w DML.

Zwykle zmiany na (1) i (2) powinny przejść do produkcji z kodem, na którym wzajemnie polegają. (3) nigdy nie powinny iść w górę, ale mogą być kopiowane do środowisk programistycznych, jeśli są one zsynchronizowane ze środowiskami produkcyjnymi w tym czasie.

Oczywiście jest to o wiele bardziej skomplikowane. Aby uzyskać (1) w górę może wymagać konwersji exsiting schematu/DDL na konkretne instrukcje zmian, a także może wymagać manipulacji danymi, jeśli typy danych lub lokalizacje się zmieniają. Aby uzyskać (2) w górę wymaga synchronizacji z kompilacją kodu, która może stać się trudna w złożonych środowiskach.

Istnieje wiele narzędzi i jeśli potrzebujesz automatyzacji, prawdopodobnie potrzebujesz porady od kogoś, kto je zna.

Używam bardzo prostego schematu, w którym wszystkie zmiany schematu są odzwierciedlone w skrypcie budowania SQL, a także są dodawane do skryptu SQL zawierającego zmiany, który zawiera wszystkie SQL wymagane do przeprowadzenia wymaganych przekształceń. To działa dobrze, ale mój scenariusz jest bardzo prosty (1 osoba, 1 serwer) i dlatego jest nietypowy.

Jednak kluczem do sukcesu jest określenie pracy wymaganej dla zmian w momencie dokonania zmiany.Naiwna metoda zmiany DB projektu, a następnie przeprowadzania remediacji w czasie wdrażania jest katastrofą.

0

Dla A) najlepszą rzeczą jest użycie systemu priorytetu. Tam, gdzie zawartość jest "domyślna", a zawartość użytkownika "zastępuje" ją. A ta treść jest w dwóch różnych miejscach. Aktualizuj swoje dane bez szansy na zajęcie się procesem scalania. Twoje dane mogą znajdować się w innym katalogu lub inaczej oznaczone w DB, cokolwiek. Wadą tego jest to, że nie można po prostu użyć podstawowej funkcjonalności serwera out do serwera danych, chyba że wykonasz rzeczywiste mapowanie podczas generowania linków.

tzn. Możesz przechwycić /site/images/icon.png i podać stronę /site/images/default/icon.png lub /site/images/client/icon.png lub podczas pisania stron może tam sprawdzić i wysłać odpowiednie adresy URL, aby serwer mógł obsługiwać je bezpośrednio.

Po drugie, kiedy można użyć danych klientów, jest to bardziej legalny problem z adresem IP, który trzeba porozmawiać z klientem o tym, czy jest) chętny i b) nawet zdolny do udostępniania ich zawartość z tobą. Po tym, technika jest prosta.

+0

Ze względu na charakter naszej działalności i umowy z klientami, prawie nigdy nie ma żadnych problemów prawnych związanych z wycofywaniem treści z serwerów produkcyjnych. Nie znam technologii. Czy mógłbyś rozwinąć? Jestem przyzwyczajony do tworzenia kopii zapasowych DB i przywracania go, ale to oczywiście ma problemy, jeśli to robisz i trwa ciągły rozwój. – Jeff

Powiązane problemy