2009-10-09 13 views
9

Obecnie korzystamy z repozytorium SVN, aby zapewnić, że wszystkie lokalne środowiska są na bieżąco aktualizowane. Jednak tworzenie stron internetowych Drupal jest nieco trudniejsze, ponieważ każdy niestandardowy kod, który napiszesz (na przykład kod PHP napisany dla ciała węzła) jest przechowywany w DB, a zmiany nie są rozpoznawane przez kopię roboczą SVN.Jak scalić zmiany w bazie danych Drupal

Istnieje kilku programistów, którzy obecnie pracują nad tym samym obszarem witryny Drupal, ale nie jesteśmy pewni, jak najlepiej scalić nasze lokalne zmiany w bazie danych Drupal. Zatwierdzanie poprawek do zrzutów bazy danych wydaje się w najlepszym wypadku nieporęczne i jest najprawdopodobniej nieefektywne i podatne na błędy w tym celu.

Wszelkie sugestie dotyczące podejścia do tego problemu są mile widziane!

Odpowiedz

5

Niestety, wdrożenie/aktualizacja bazy danych jest jednym z słabych punktów Drupals. Zobacz this question & answers, a także this one, aby uzyskać wskazówki, jak sobie z tym poradzić.

Co do CCK, można znaleźć wskazówki: here.

Jeśli chodzi o kod php w treści, zgadzam się z googletorp, że należy tego unikać. Jeśli jednak z jakiegoś powodu absolutnie musisz to zrobić, możesz spróbować zredukować kod do prostego wywołania funkcji. W ten sposób funkcja będzie sama w module (i będzie śledzona przez SVN). Ale wtedy jesteś tylko o krok od usunięcia kodu wbudowanego tak czy inaczej ...

1

Wprowadzając poprawki zrzutów bazy danych, czy masz na myśli pobranie całego wyciągu z bazy danych i zatwierdzenie jej po każdej zmianie?

Co z główną kopią bazy danych? Wyodrębnij wszystkie tabele, widoki, sps, etc ... do poszczególnych plików, umieść je w svn i wykonaj scalone zmiany na poszczególnych obiektach?

+0

Tak, oznaczało biorąc cały wyciąg bazy danych. Dane wyjściowe tego pliku zrzutu zależą od tego, jak programista określa argumenty wyjściowe (niektóre mogą zażądać na przykład instrukcji DROP IF IF EXISTS lub komentarzy), więc nie jest to bardzo niezawodne. Wydobywając każdy stół wydaje się nieco zbyt nużący, aby to, co jest warte, i pojawia się z tymi samymi niespójnościami. – David

+0

Standaryzowałabym sposób wyodrębniania skryptów - np. Zawsze istnieje kropla, jeśli istnieje i instrukcje uprawnień, standardowe formatowanie. Ponadto, jeśli twoje obiekty są indywidualnie pisane, a deweloperzy zatwierdzają wszystkie obiekty związane ze zmianą w jednym zatwierdzeniu, staje się on łatwiejszy w zarządzaniu. Zakładam, że kiedy popełniasz i robisz swoje rozwiązania, przeglądasz duży plik i robisz wiele przewijania. Kiedy pracujesz z pojedynczymi plikami, zmusza to do skupienia się na jednej rzeczy. Wystarczy wyodrębnić wszystko raz, w ostatnim roboczym stanie produkcji i rozpocząć pracę. – Steve

4

Jeśli umieszczasz kod php w bazie danych, robisz to źle. Niektóre rzeczy są wewnątrz bazy danych, takie jak widoki i pola cck oraz niektóre ustawienia. Ale jeśli umieścisz kod php w ciele węzła, utworzysz poważny problem z utrzymaniem kodu. Powinieneś naprawdę użyć interfejsu API i zamiast tego przechwytywać. Twórz moduły zamiast brzydkich hacków za pomocą eval itp.

+1

Dobra sugestia, dzięki. Pozostaje jednak pytanie, jak scalić inne zmiany bazy danych, które deweloperzy wprowadzają w swoich lokalnych środowiskach (takich jak dodawanie pól CCK lub ustawień węzła), zanim cała sprawa zostanie uruchomiona w centralnej bazie danych. Niestandardowy kod PHP jest jednym z niewielu typów wejść wbudowanych w Drupala (przyznawanym, że można go wyłączyć w Drupal 6), co sugeruje, że jest to bardziej elastyczna cecha tego CMS niż brzydki hack. – David

+0

Istnieje dla szybkiej i brudnej pracy, ale jest ogólnie uważany za zły pomysł - należy unikać całego kodu eval. Problem, przed którym stoisz, jest doskonałym przykładem. Jest to dobra cecha - jest dobra do szybkiego eksperymentowania i budowania CCK/widoków, które wiesz, że wyeksportujesz i uruchomisz jako kod płaski. – Grayside

2

Wszystko, co zostało powiedziane powyżej, jest prawdą i dobrą radą .. Aby odpowiedzieć na twoje praktyczne pytanie, istnieje wiele ostatnich modułów które możesz wykorzystać do przeniesienia zmian dokonanych przez różnych programistów.

Moduły "Funkcje" to lekarstwo na opisywany problem Drupala, który często oferuje ładne funkcje, aczkolwiek zachowuje wiele konfiguracji i struktur w DB. Ten moduł umożliwia przechwycenie funkcji i wyprowadzenie jej jako pseudo-modułu (kwalifikuje się jako moduł z .info i plikami kodu i wszystkimi).Oto jak to działa:

  1. Wybierz funkcjonalność/funkcja eksportowania
  2. Moduł analiz modułów, pliki, zawartość DB, który jest wymagany do odbudowania tej funkcji w innym
  3. Moduł tworzy pseudo-moduł zawiera instrukcje w punkcie 3 i wyprowadza wszystko (nawet SQL w celu przebudowania rzeczy w DB) do pakietu modułów (jak również ustawia zależności dla innych wymaganych modułów)
  4. Zainstaluj pseudo moduł w nowej witrynie i włącz go
  5. Pseudo-moduł replikuje funkcję y ou eksportowane odbudowy danych DB i wszystkie

I można powiedzieć swojemu szefowi, można to wszystko ręcznie z maszynki naciskiem, aby uniknąć nawet 1 błąd;) Mam nadzieję, że to pomoże - http://drupal.org/project/features

Powiązane problemy