2013-10-13 17 views
19

Attualmente ho due ambienti in cui lavoro: development localmente e production su Heroku.Aggiunta di un ambiente di staging al flusso di lavoro

Vorrei aggiungere un ambiente staging su Heroku per verificare che tutto vada come previsto prima di spingere l'app in diretta agli utenti. Preferibilmente, l'ambiente staging deve avere le stesse impostazioni e i medesimi dati dell'ambiente production.

Quali sono i passaggi necessari per eseguire quanto sopra?

risposta

34

In primo luogo le predisposizioni, mi piace avere i miei telecomandi git heroku impostati come allestimento e produzione in modo da poter utilizzare facilmente la gestione/produzione di git push per distribuirli a ciascuno di essi. Userò questa configurazione per spiegare come creare un env staging.

  1. creare un config/environments/staging.rb cui copiare fuori `config/ambienti/production.rb'
  2. aggiungere una voce database.yml per il database di gestione temporanea (non proprio necessaria per Heroku, ma non può far male)
  3. Backup il file .env (se lo avete)
  4. installazione plug Heroku-config da heroku plugins:install git://github.com/ddollar/heroku-config.git
  5. tirare le impostazioni di ambiente da Heroku (server di produzione) con heroku config:pull --remote production
  6. fare chang es al file .env e non dimenticare di aggiungere questi valori alla configurazione: RACK_ENV=staging RAILS_ENV=staging in modo che utilizzi la configurazione dell'ambiente di staging.
  7. forchetta un ambiente Heroku con heroku fork -a production staging (quelli sono Heroku appnames si desidera, invece di produzione/staging)
  8. Fare un `Heroku config: spingere messa in scena --remote'
  9. Assicurarsi di distribuire il codice per mettere in scena ENV correttamente

si può anche leggere questo tutorial, penso ho usato per iniziare con più ENV su Heroku: https://devcenter.heroku.com/articles/multiple-environments#managing-staging-and-production-configurations

+0

Grazie mille per la spiegazione dettagliata. Ho iniziato a cogliere la mia idea del concetto di installazione remota di produzione/messa in scena e, una volta installato, ho iniziato a chiedermi: quali sono i vantaggi effettivi per separare gli ambienti di produzione/scenografia?In genere avrei due rami locali: master/sviluppo, e quando lo sviluppo è stato spinto e rivisto sul telecomando di staging, unire lo sviluppo -> master e inviarlo al remoto di produzione. –

+3

Dovresti avere l'env di staging, lo stesso del tuo ambiente di produzione per vedere come l'app esegue realmente nell'ambiente di produzione, e poter essere in grado di testare le funzionalità prima che entrino in produzione. La maggior parte dei problemi che il TDD non riesce a cogliere sono ad esempio regressioni di css che si possono facilmente saltare, o l'inferno di asset sempre in crisi può rompersi da qualche parte. Una cosa breve, avere un env di staging, dovrebbe essere la stessa configurazione di quella di produzione, non è necessario avere la stessa bestia del server, basta assicurarsi che lo stack sia completamente lo stesso, fino alla distribuzione. – berislavbabic

+0

quando eseguo la configurazione di heroku: comando pull ottengo 'config: pull' non è un comando heroku. Nastro degli strumenti scaricato pochi giorni fa per mac: heroku-toolbelt/3.2.1 (x86_64-darwin10.8.0) ruby ​​/ 1.9.3 – jpwynn

8

ho trovato il heroku fork -a PRODUCTION_APP_NAME NEW_STAGE_APP_NAME di essere un modo più facile e veloce per farlo ... c riattiva la nuova app, copia tutto (incluso il database postgres). Poi sono entrato e ho declassato manualmente gli addon in piani più piccoli quando aveva senso (per esempio, un database di livello base).

In realtà, abbiamo iniziato a utilizzare il relativamente nuovo heroku pipeline:promote per gestire automaticamente (e molto rapidamente) spingendo una lumaca compilato dallo staging alla produzione. (Questo presuppone che le impostazioni specifiche-ENV tramite impostazioni o variabili d'ambiente, in modo che il codice di lumaca è lo stesso.)