2013-10-13 8 views
19

Ich habe derzeit zwei Umgebungen, in denen ich arbeite: development lokal und production auf Heroku.Hinzufügen einer Staging-Umgebung zum Workflow

Ich möchte eine staging Umgebung auf Heroku hinzufügen, um zu sehen, dass alles wie erwartet abläuft, bevor Sie die App live an die Benutzer weitergeben. Vorzugsweise sollte die staging Umgebung genau die gleichen Einstellungen und Daten wie die production Umgebung haben.

Welche Schritte sind erforderlich, um das oben genannte zu erreichen?

Antwort

34

Zuerst die Prädispositionen, ich möchte meine heroku git-Fernbedienungen als Inszenierung und Produktion einrichten lassen, so dass Sie git push staging/production ganz einfach verwenden können. Ich werde dieses Setup verwenden, um zu erklären, wie ein Staging-Env erstellt wird.

  1. erstellen config/environments/staging.rb, die Sie off `config/Umgebungen/production.rb kopiert‘
  2. für die Staging-Datenbank ein database.yml Eintrag hinzufügen (nicht wirklich für Heroku benötigt, kann aber nicht schaden)
  3. Sichern Sie Ihre .env-Datei (wenn Sie es haben)
  4. installieren Heroku-config-Plugin von heroku plugins:install git://github.com/ddollar/heroku-config.git
  5. ziehen Sie Ihre Umgebungseinstellungen von Heroku (Produktionsserver) mit heroku config:pull --remote production
  6. chang machen es zu der .env-Datei und vergessen Sie nicht, diese Werte zu der Config: RACK_ENV=staging RAILS_ENV=staging hinzufügen, so dass es die Staging-Umgebung Konfiguration verwenden wird.
  7. Gabel ein Heroku Umgebung mit heroku fork -a production staging (das sind Heroku appnames Sie statt Produktion/staging wollen)
  8. Führen Sie eine `Heroku config: Push --remote Inszenierung‘
  9. Achten Sie darauf, um den Code zu inszenieren env richtig einsetzen

Sie können auch dieses Tutorial lesen, ich glaube, ich benutzte es, mit mehreren ENVs auf Heroku, um loszulegen: https://devcenter.heroku.com/articles/multiple-environments#managing-staging-and-production-configurations

+0

Vielen Dank für die detaillierte Erklärung. Ich fing an, mich mit dem Konzept der Inszenierung/Produktion von Remote-Setup zu beschäftigen, und sobald das vorhanden war, begann ich mich zu fragen: Was sind die tatsächlichen Vorteile, um die Produktions-/Staging-Umgebungen zu trennen?Normalerweise hätte ich zwei lokale Zweige: Master/Entwicklung, und wenn die Entwicklung auf der Staging-Remote gepusht und überprüft wurde, würde ich Entwicklung -> Master verschmelzen und sie zur Produktions-Remote schieben. –

+3

Sie sollten die Staging-Umgebung haben, die Ihrer Produktionsumgebung entspricht, um zu sehen, wie die App in der Produktionsumgebung wirklich funktioniert, und damit der Produkteigentümer die Funktionen testen kann, bevor sie in Produktion gehen. Die meisten der Probleme, die TDD nicht wirklich erfassen kann, sind zum Beispiel CSS-Regressionen, die Sie leicht überspringen können, oder die immer eingebrüllte Asset-Hölle kann irgendwo brechen. Kurze Sache, haben eine Staging-env, sollte die gleiche Konfiguration wie die Produktion sein, müssen Sie nicht die gleiche Bestie des Servers haben, nur sicher sein, dass der Stapel vollständig identisch ist, bis zur Bereitstellung. – berislavbabic

+0

wenn ich den Befehl heroku config: pull ausführen Ich bekomme 'config: pull' ist kein Befehl heroku. Download Toolbelt vor ein paar Tagen für Mac: heroku-toolbelt/3.2.1 (x86_64-darwin10.8.0) ruby ​​/ 1.9.3 – jpwynn

8

ich die heroku fork -a PRODUCTION_APP_NAME NEW_STAGE_APP_NAME fand ein schneller, einfacher Weg, es zu tun ... es c Erstellt die neue App, kopiert alles (einschließlich der Postgres-Datenbank). Dann ging ich rein und stufte die Addons manuell zu kleineren Plänen herunter, wenn es sinnvoll war (zum Beispiel eine Starter-Tier-Datenbank).

In der Tat haben wir begonnen, die relativ neue heroku pipeline:promote zu verwenden, um automatisch (und sehr schnell) einen kompilierten Slug vom Staging in die Produktion zu schieben. (Das setzt voraus, Sie haben keine env-spezifische Einstellungen über Einstellungen oder Umgebungsvariablen, so dass der Code Slug gleich ist.)

Verwandte Themen