Ecco i nostri requisiti di base:Eseguire una versione personalizzata di un'applicazione Rails
- Abbiamo un'applicazione di base Rails, che è mantenuto attivamente.
- Vogliamo offrire una versione personalizzata di questa app, dato che:
- i server devono risiedere nella premessa dei nostri clienti ed essere eseguiti su un dominio diverso.
- c'è una specifica strumentazione di registrazione per il proprio monitoraggio nel datacenter.
Per fare questo, posso vedere diverse opzioni per raggiungere tale obiettivo:
- Git ramo
Rails::Engine
Rails::Application
La risposta più ovvia sarebbe essere filiale Git, per la massima flessibilità.
Tuttavia, non sono sicuro che sia una buona idea, perché la base di codice è ampiamente condivisa e la linea principale ha molte più attività: recuperare rebase/merge potrebbe essere un problema in più.
Vogliamo dividere il più possibile l'originale e le versioni personalizzate. In altre parole, vogliamo avere il minor numero possibile di conflitti tra l'originale e il personalizzato.
Rails::Engine
o Rails::Application
sembrava una stretta idea (io non sono a conoscenza Rails motori), ma non capisco come avere OurApp::Application
e OurCustomizedApp::Application
in un posto e passare da uno all'altro a livello globale e in modo dinamico.
Probabilmente sarebbe bello avere:
- personalizzati inizializzatori, controller e punti di vista in una directory separata per ignorare (o patch) l'originale
- possibilità di specificare quale app (l'originale o la misura) per l'avvio da una variabile di ambiente come
RAILS_APP
- file di configurazione separati, in questo modo:
config/database.yml
essereconfig/customer1/database.yml
- possibilità di utilizzare lo stesso
deploy.rb
per capistrano (p robably conconfig/servers.yml
econfig/customer1/servers.yml
per definire ruoli e IP?)
C'è pratiche/convenzioni per le nostre esigenze? Qualche consiglio?
Le nostre app funzionano su Ruby 1.9.2 + Rails 3.0.3.
UPDATE
Abbiamo iniziato come un ramo Git. Abbiamo creato un'attività rake per generare un file allo config/branch
che include testo come "master" o "personalizzato" e application.rb lo legge su bootstrap.Le configurazioni come database.yml
o servers.yml
ora vivono in config/mainline/
o config/customized/
e application.rb le gestisce di conseguenza.
config.paths.config.database = "config/#{branch}/database.yml"
Non perfetto, ma abbastanza buono per ora. Aggiornerò quando troveremo un modo migliore per farlo.
Abbiamo finito con il ramo Git e fino ad ora ha funzionato abbastanza bene. Grazie! – kenn