Oto nasze podstawowe wymagania:Uruchom dostosowaną wersję aplikacji Rails
- Mamy aplikacji bazy szyny, która jest aktywnie utrzymane.
- Chcemy zaoferować niestandardową wersję tej aplikacji, ponieważ:
- serwery muszą znajdować się w siedzibie klienta i działać w innej domenie.
- Istnieje specjalna oprzyrządowanie do rejestrowania dla własnego monitorowania w centrum danych.
Aby to zrobić, widzę kilka opcji, aby osiągnąć ten cel:
- git branch
Rails::Engine
Rails::Application
Najbardziej oczywista odpowiedź byłaby być oddziałem Git, dla pełnej elastyczności.
Nie jestem jednak pewien, czy to dobry pomysł, ponieważ baza kodów jest w dużej mierze udostępniona, a linia główna ma o wiele więcej zajęć - nadrobienie zaległości i scalenie może być tylko dodatkowym kłopotem.
Chcemy rozdzielić oryginalne i spersonalizowane wersje tak daleko, jak to możliwe. Innymi słowy, chcemy możliwie najmniej konfliktów między oryginałem a spersonalizowanym.
Rails::Engine
lub Rails::Application
wydawał się bliski idei (nie jestem zaznajomiony z szynami Engines), ale nie rozumiem, jak mają OurApp::Application
i OurCustomizedApp::Application
w jednym miejscu i przełączać się między nimi w skali globalnej i dynamicznie.
Prawdopodobnie byłoby miło mieć:
- niestandardowe inicjalizatory, kontrolery i widoki w oddzielnym katalogu, aby zastąpić (lub plaster) oryginalną
- możliwość określenia, która aplikacja (oryginał lub dostosować), aby uruchomić przez zmienną środowiskową jak
RAILS_APP
- oddzielnych plikach konfiguracyjnych, tak:
config/database.yml
byćconfig/customer1/database.yml
- możliwość korzystania z tego samego
deploy.rb
dla Kapistrana (p robably zconfig/servers.yml
iconfig/customer1/servers.yml
zdefiniowanie ról i IPS?)
Czy praktyki/zjazdy do naszych potrzeb? Jakakolwiek rada?
Nasze aplikacje działają w Ruby 1.9.2 + Rails 3.0.3.
UPDATE
Zaczęliśmy go jako gałąź Git. Stworzyliśmy zadanie rake do wygenerowania pliku pod numerem config/branch
, który zawiera tekst taki jak "master" lub "customized", a application.rb odczytuje go podczas bootstrap.Konwersje takie jak database.yml
lub są teraz dostępne w postaci config/mainline/
lub config/customized/
, a application.rb odpowiednio je obsługuje.
config.paths.config.database = "config/#{branch}/database.yml"
Nie doskonały, ale wystarczająco dobry na razie. Zaktualizuję, gdy znajdziemy lepszy sposób na zrobienie tego.
Zakończyliśmy działalność oddziału Git i do tej pory działało całkiem dobrze. Dzięki! – kenn