Mi piacerebbe essere in grado di eseguire il push del codice dev.myapp.com
per i test e quindi www.myapp.com
per l'uso in produzione. È possibile con Heroku?
Mi piacerebbe essere in grado di eseguire il push del codice dev.myapp.com
per i test e quindi www.myapp.com
per l'uso in produzione. È possibile con Heroku?
Risposte:
La tua interfaccia per Heroku è essenzialmente un ramo Git. La gemma Heroku funziona in parte tramite la loro API, ma all'interno del tuo repository Git è solo un nuovo ramo remoto.
heroku create yourapp # production
git br -D heroku # delete the default branch
heroku create staging-yourapp # staging
git br -D heroku # delete the default branch
Dopo aver configurato più applicazioni su Heroku, dovresti essere in grado di configurare il tuo repository Git in questo modo:
git remote add staging git@heroku.com:staging-yourapp.git
git push origin staging
git remote add production git@heroku.com:yourapp.git
git push origin production
Di solito lavoro in un ramo "funzionante" e uso Github per il mio master.
Supponendo che sia così per te, il tuo flusso di lavoro di distribuzione sarebbe probabilmente simile a:
git co -b working
# do some work
# push to github:
git co master
git merge working
git push
# push to staging:
git co staging
git merge master
git push origin staging
# push to production
git co production
git merge master
git push origin production
heroku create yourapp --remote your-remote
heroku
comandi devono includere --app staging
o --app production
. C'è un modo per impostare un valore predefinito? (Chiedere come commento b / c sembra troppo mirato per essere una domanda SO a tutti gli effetti.)
Questo spiega tutto ciò che devi sapere se sei un principiante come me: http://devcenter.heroku.com/articles/multiple-environments
Una parte fondamentale della domanda originale riguarda il collegamento dell'app di staging a un sottodominio (dev.myapp.com) dell'app principale (www.myapp.com). Questo non è stato affrontato in nessuna delle risposte.
Passaggio 1: configura sia la versione di produzione ('myapp') che quella di staging ('staging-myapp') dell'app come indicato nella risposta di Luke Bayes
Passaggio 2: nel sistema di gestione del dominio (ad es. GoDaddy):
Create a CNAME record: dev.myapp.com
that points to: proxy.heroku.com
Passaggio 3: configura Heroku per instradare dev.myapp.com a staging-myapp:
heroku domains:add dev.myapp.com --app staging-myapp
Dopo che il record CNAME ha avuto il tempo di propagarsi, sarai in grado di eseguire l'app di staging su dev.myapp.com.
before_filter
hook al mio application_controller
per catturare TUTTO in staging e costringere l'utente ad accedere come amministratore, quindi impostare un cookie amministratore in modo che io possa ancora vedere l'app dal punto di vista di un "non amministratore". Funziona abbastanza bene per me.
Dovresti controllare heroku_san
Fa un ottimo lavoro destreggiandosi con gli ambienti su heroku.
Adesso le cose sono più facili. Ecco come lo fai ...
$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging
Questo creerà repository remoti con nome per ogni app, che puoi vedere in .git/config
.
Ora puoi utilizzare gli interruttori --app o --remote per indirizzare una particolare app:
$ heroku info --app myapp-staging
$ heroku info --remote staging
Per le app Rails, Heroku utilizza per impostazione predefinita l'ambiente di "produzione" . Se desideri che la tua app di staging venga eseguita in un ambiente di staging, crea l'ambiente nel tuo progetto e imposta le variabili d'ambiente RAILS_ENV e RAKE_ENV corrispondenti sull'app:
$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging
Se hai altre variabili di configurazione, dovrai passarle anche per ogni ambiente.
$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc
Questo è un enorme dolore, quindi uso la mia gemma snappconfig e corro
$ rake heroku:config:load[myapp-staging]
per caricare i file di configurazione YAML del mio progetto in Heroku.
Ora devi solo premere su Heroku in questo modo:
$ git push staging master
$ git push production master
e migra in questo modo:
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production
(Vedi Gestione di più ambienti per un'app | Heroku Dev Center per maggiori informazioni e scorciatoie.)
RAILS_ENV
and RACK_ENV
to staging
è sconsigliato da Heroku: "Potrebbe essere allettante creare un altro ambiente personalizzato come" staging "e creare un file config / environment / staging.rb e distribuirlo a un'app Heroku con RAILS_ENV = staging. Questa non è una buona pratica . Invece si consiglia di eseguire sempre in modalità di produzione e modificare qualsiasi comportamento impostando le variabili di configurazione. " Maggiori informazioni su questo qui: devcenter.heroku.com/articles/…
git push staging edge work
?