Ich möchte in der Lage sein, Code zum dev.myapp.com
Testen und dann zur www.myapp.com
Verwendung in der Produktion zu übertragen. Ist das mit Heroku möglich?
Ich möchte in der Lage sein, Code zum dev.myapp.com
Testen und dann zur www.myapp.com
Verwendung in der Produktion zu übertragen. Ist das mit Heroku möglich?
Antworten:
Ihre Schnittstelle zu Heroku ist im Wesentlichen ein Git-Zweig. Das Heroku-Juwel arbeitet zwar über seine API, aber in Ihrem Git-Repository ist es nur ein neuer Remote-Zweig.
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
Sobald Sie mehrere Anwendungen auf Heroku eingerichtet haben, sollten Sie Ihr Git-Repository wie folgt konfigurieren können:
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
Normalerweise arbeite ich in einem "arbeitenden" Zweig und benutze Github für meinen Meister.
Angenommen, dies ist bei Ihnen der Fall, würde Ihr Bereitstellungsworkflow wahrscheinlich folgendermaßen aussehen:
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
Befehle --app staging
oder enthalten --app production
. Gibt es eine Möglichkeit, einen Standard festzulegen? (Als Kommentar b / c zu fragen, scheint dies zu zielgerichtet, um eine vollwertige SO-Frage zu sein.)
Dies erklärt alles, was Sie wissen müssen, wenn Sie ein Neuling wie ich sind: http://devcenter.heroku.com/articles/multiple-environments
Ein wesentlicher Teil der ursprünglichen Frage besteht darin, die Staging-App mit einer Subdomain (dev.myapp.com) der Haupt-App (www.myapp.com) zu verknüpfen. Dies wurde in keiner der Antworten angesprochen.
Schritt 1: Konfigurieren Sie sowohl die Produktionsversion ('myapp') als auch die Staging-Version ('staging-myapp') Ihrer App, wie in der Antwort von Luke Bayes angegeben
Schritt 2: In Ihrem Domain Management System (zB GoDaddy):
Create a CNAME record: dev.myapp.com
that points to: proxy.heroku.com
Schritt 3: Konfigurieren Sie Heroku so, dass dev.myapp.com an staging-myapp weitergeleitet wird:
heroku domains:add dev.myapp.com --app staging-myapp
Nachdem der CNAME-Datensatz Zeit für die Weitergabe hatte, können Sie Ihre Staging-App unter dev.myapp.com ausführen.
before_filter
Hook zu meinem hinzugefügt application_controller
, um ALLES beim Staging zu fangen und den Benutzer zu zwingen, sich als Administrator anzumelden. Dann habe ich ein Admin-Cookie gesetzt, damit ich die App immer noch aus der Sicht eines "Nicht-Administrators" sehen kann. Arbeitet ziemlich gut für mich.
Sie sollten den heroku_san überprüfen
Es macht einen ziemlich guten Job, mit Umgebungen auf Heroku zu jonglieren.
Die Dinge sind jetzt einfacher. So geht's ...
$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging
Dadurch werden benannte Remote-Repos für jede App erstellt, die Sie in sehen können .git/config
.
Sie können jetzt entweder die Schalter --app oder --remote verwenden, um auf eine bestimmte App abzuzielen :
$ heroku info --app myapp-staging
$ heroku info --remote staging
Für Rails-Apps verwendet Heroku standardmäßig die "Produktions" -Umgebung . Wenn Ihre Staging-App in einer Staging-Umgebung ausgeführt werden soll, erstellen Sie die Umgebung in Ihrem Projekt und legen Sie die entsprechenden Umgebungsvariablen RAILS_ENV und RAKE_ENV in der App fest:
$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging
Wenn Sie andere Konfigurationsvariablen haben, müssen Sie diese auch für jede Umgebung übergeben.
$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc
Das ist allerdings ein großer Schmerz, also benutze ich einfach mein snappconfig- Juwel und renne los
$ rake heroku:config:load[myapp-staging]
um die YAML-Konfigurationsdateien meines Projekts in Heroku zu laden.
Jetzt drückst du einfach so zu Heroku:
$ git push staging master
$ git push production master
und migrieren Sie wie folgt:
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production
( Weitere Informationen und Verknüpfungen finden Sie unter Verwalten mehrerer Umgebungen für eine App | Heroku Dev Center .)
RAILS_ENV
und RACK_ENV
zu staging
wird von Heroku entmutigt: „Es mag verlockend sein , eine andere benutzerdefinierte Umgebung wie zu schaffen‚Staging‘und erstellen Sie eine config / Umgebungen / staging.rb und deploy auf eine Heroku App mit RAILS_ENV = Staging dies keine gute Praxis. Stattdessen empfehlen wir, immer im Produktionsmodus zu arbeiten und das Verhalten durch Festlegen Ihrer Konfigurationsvariablen zu ändern. " Mehr dazu hier: devcenter.heroku.com/articles/…
git push staging edge work
?