2012-07-04 19 views
18

Mi è piaciuto usare Rails su Heroku e, in questo modo, posso regolare la proprietà di configurazione di un'app di Heroku senza dover eseguire il commit su xyz.yml e ridistribuire.Gestione della configurazione nelle applicazioni a 12 fattori

Sarebbe bello eliminare completamente i file di configurazione Yaml nella mia app Rails e fare affidamento il più possibile sulla memorizzazione della configurazione in ENV. Questo va di pari passo con il principio 12-factor config.

Tuttavia, ci sono alcuni compromessi nel passaggio da una gestione della configurazione basata su Yaml a una basata su Heroku/12 fattori.

  • Mentre è vero che la proliferazione di implementazioni (QA, stage, prod, dev, demo, laboratori) può portare ad una proliferazione di file YAML, è molto facile da copiare e incollare per creare un nuovo profilo di configurazione. Non vedo un modo per "copiare" i profili di configurazione da una distribuzione all'altra in Heroku.
  • Memorizzare i dati di configurazione nel repository significa che, nel caso di Heroku, l'implementazione e la configurazione e l'applicazione vengono eseguite in un'unica operazione. Se dovessi spostare la mia configurazione da file Yaml e variabili ENV, dovrei configurare la mia applicazione in un passaggio separato dopo la distribuzione.

Vorrei sentire chi ha utilizzato la configurazione in stile 12 fattori nelle proprie applicazioni private e come ha gestito molte variabili di configurazione in molte distribuzioni.

  • Come si configura rapidamente una nuova distribuzione?
  • Dove mantieni la tua fonte autorevole di variabili di configurazione, se non il repository? Come lo distribuisci tra gli sviluppatori?

Grazie!

risposta

4

È possibile raggiungere questo obiettivo relativamente facile con alcuni semplici script di shell, iterare variabili esistenti tramite Heroku config o Heroku rilascio: informazioni V99, e quindi impostare config Heroku: impostare k = v --app

Ma se un problema/dolore/attrito forse hai troppa nella tua configurazione di env var.

+1

Non lavoro con Heroku, ma ritengo che 12 fattori possano essere applicati a qualsiasi applicazione SaaS. Posso creare uno script di shell personalizzato per creare quella configurazione nei miei ambienti. Ma, dopo questo background, la mia domanda è: non ci sono problemi di sicurezza nel rendere le mie vele di configurazione, come i dati di accesso al database, diventano vvars? –

10

Quello che uso in genere è Yaml che utilizza ENV e fornisce i valori predefiniti. Per esempio, YAML può essere ERB'ed felicemente di includere il tuo ENV vars:

foo: 
    var: ENV["MY_CONFIG"] || "default_value" 

Hai solo bisogno di fare in modo che si carica l'Yaml con ERB quando lo si legge:

YAML.load(ERB.new(File.read("#{Rails.root}/config/app_config.yml")).result) 

Facendo questo tuo codice funziona bene in dev, ma ti permette anche di impostare i parametri di configurazione nell'ambiente.

0

Un po 'una risposta tardiva, ma credo che questo sia quello che stai cercando.

Ho sviluppato una gemma chiamata settei, che consente di utilizzare i file YAML per configurare l'app. Tuttavia, la gemma serializzerà il file YAML come una variabile di ambiente durante la distribuzione. In questo modo si ottiene il meglio da entrambi i mondi: YAML per facilità di gestione/creazione di un ambiente derivato ed ENV per conformità a 12 fattori.