2012-10-29 7 views
5

Typowy wzorzec pomiędzy rozwojem a produkcją to strona internetowa dev używająca sqlite, ponieważ jest to konfiguracja zerowa, ale potem użyj PostgresSQL lub MySQL w produkcji. Jednak w domyślnym pliku z ustawieniami Settings.hs generowanym przez Yesod określono tylko jeden stały backend. Czy istnieje sposób, aby konfiguracja Development używała jednego trwałego backendu, a konfiguracja Production innego? Dodatkowo powinny one mieć oddzielne pliki YAML ustawiania bazy danych, tak aby można było skonfigurować prostą nazwę pliku dla sqlite, ale dane referencyjne bazy produkcyjnej nigdy nie trafią do repozytorium VCS.Yesod wiele trwałych backendów dla jednej witryny

Odpowiedz

1

Nie podoba mi się ta ogólna praktyka, ponieważ mogą występować subtelne różnice między silnikami baz danych, które nie pojawiają się przed rozpoczęciem produkcji. (Można to złagodzić, umieszczając serwer pośredniczący.)

W każdym razie, możesz to zrobić za pomocą kompilacji warunkowej, chociaż strona z rusztowaniem nie jest zaprojektowana tak, by działała w ten sposób natychmiast po uruchomieniu. Poszukaj wszystkich miejsc, które odnoszą się do konkretnego backendu i uzależnij je od zmiennej CPE DEVELOPMENT.

+1

W szczególności, chcesz zmienić backend/Application.hs (plik zawiera yml) i backend/Settings.hs (definicja importu i PersistConfig). Przykład zatwierdzenia: https://github.com/ezyang/hpd3js/commit/1816033db4973d89d6454f8b9f4ecb2806e84432 –