2011-07-28 13 views
8

Mam aplikację PHP, która jest napisana za pomocą Zend Framework. Używa Phing do budowy systemu i PHPUnit do testowania jednostkowego. Wszystkie te części mają ustawienia konfiguracji. Zend używa application.xml, Phing używa build.xml i opcjonalnie niektóre build.properties, a PHPUnit używa phpunit.xml.Jak przechowywać wspólną konfigurację dla Zend, Phing i phpunit?

Ale gdzie mam przechowywać informacje wymagane przez wszystkie trzy komponenty? Pomyśl o konfiguracji bazy danych (na przykład hasła).

W moim przypadku application.xml ma różne sekcje (dev, inscenizacja, produkcja) wszystkie z różnymi konfiguracjami bazy danych. Niedawno zaimplementowałem aplikację ORM w mojej aplikacji i chcę teraz dokonać resetu moich modeli. Mam więc czwartą bazę danych (unittesting), która jest używana przez PHPUnit.

PHPUnit obsługuje dane urządzeń, ale nie schematy bazy danych. Pomyślałem więc, że napiszę obiekt kompilacji Phing, który skopiuje schemat bazy danych z produkcji lub pomostu do bazy unittest. W ten sposób mam dodatkową korzyść, że mogę nawet zmienić mój skrypt migracji do bazy danych. Ale aby to zrobić, Phing potrzebuje dostępu do kilku baz danych w tym samym czasie.

Moim pierwszym instynktem było umieszczenie całej konfiguracji dla wszystkich czterech baz danych w build.properties i posiadanie Phinga po prostu wygenerować application.xml i phpunit.xml. Ale, czuje się eh, brudny mieć system kompilacji generowania plików konfiguracyjnych.

Jakie jest najlepsze rozwiązanie? Czy powinienem po prostu duplikować szczegóły konfiguracji i nie martwić się zbytnio?

Myśli

może po prostu je powielać. To tylko kilka ustawień i nie powinny się one często zmieniać. Ale założę się, że kiedy się zmienią, zapomnę o duplikacji (ponieważ zdarza się to rzadko). Wspólne parametry obejmują:

  • konfiguracji bazy danych (dev, przemieszczania, produkcji i unittests)
  • sa ścieżki. Używamy starszych bibliotek, które nie współpracują z mechanizmami ładującymi. Do tej pory częściowo rozwiązaliśmy ten problem za pomocą inteligentnego pliku automatycznego załączania.
  • Kilka WebService poświadczenia API
+0

Ile masz duplikatów i jak często się zmienia? – hakre

+0

Jest to garść zmiennych i nie powinny one zbyt często się zmieniać. Zaktualizuję nieco moje pytanie. –

+1

Uwaga boczna: Stwierdziłem, że tworzenie niestandardowego autoloadera dla starych bibliotek i umieszczanie go na stosie autoloadera Zend działa jak cud. Nagle wszystkie moje niemądre wbudowane wywołania 'require' mogą zostać usunięte, a kod konsumenta _feels_ cleaner. –

Odpowiedz

7

Mój pierwszy instynkt było umieścić całą konfigurację dla wszystkich czterech bazach w build.properties i mają Phing prostu wygenerować application.xml i phpunit.xml. Ale czuć się brudnym, gdy system kompilacji generuje pliki konfiguracyjne.

Cóż, w pełni je wygenerować wydaje się nieco brudny. Ale jeśli system kompilacji po prostu zastępuje token z pliku build.properties Phinga na wersjach .dist różnych plików konfiguracyjnych, wydaje mi się to ok. Na przykład: .

+0

+1 To brzmi jak świetny pomysł, gdy przeczytałem go również w pytaniu. System kompilacji powinien budować wszystko, czego potrzebuje aplikacja z elementów źródłowych, a pojedynczy zunifikowany plik właściwości jest doskonałym elementem źródłowym. :) –

+0

To właśnie robimy z podobnym układem (Symfony zamiast Zend Framework). Jest prosty w implementacji, dość prosty w obsłudze i dość głupi. – poisson

+0

Dzięki. Właśnie to zaimplementowałem teraz. Zrobiłem z tego element warunkowej budowy. Po zbudowaniu nie zostanie przebudowany (chyba że podano '-Doverwrite'), więc ludzie nie nadpisują ich przypadkowo. –