2016-06-28 7 views
12

Ich verwende die Review Apps-Funktion, die mit Github auf Heroku integriert ist. In einer meiner Apps habe ich eine Umgebungsvariable namens HOST_NAME festgelegt. Wenn die Site z. B. http://www.purplebinder.com ist, wird HOST_NAME auf www.purplebinder.com festgelegt. Es wird an einigen Orten verwendet, an denen wir mit Cookies und in unseren Transaktions-E-Mails arbeiten.Legen Sie den Hostnamen als Umgebungsvariable in der Heroku Test App fest

Wenn ich eine neue Pull-Anforderung öffne und eine Review App starte, sollte HOST_NAME so etwas wie purplebinder-pr-27.herokuapp.com sein.

Gibt es eine Möglichkeit, diesen Wert automatisch festzulegen? Die Heroku documentation on review apps besagt, dass eine env var einen Wert von der übergeordneten App erben kann oder in app.json hardcoded sein kann. Keines dieser Ansätze funktioniert hier, da der Wert jedes Mal anders sein muss und sich auch von der übergeordneten App unterscheidet.

Heroku sagt auch eine env var kann "durch einen Generator" gesetzt werden, geht aber nicht ins Detail, was das ist.

Diese Frage könnte ein Duplikat von Setting ROOT_URL for Review Apps sein, aber niemand antwortete darauf. Es ist auch ähnlich zu How to get Heroku app name from inside the app, aber die Antworten dort umfassten das Ausführen eines Skripts nach dem Erstellen der App - hier möchte ich diesen Wert als Teil des ersten Builds festlegen.

+4

mit der gleichen Sache Struggling zur Zeit - Und ich würde behaupten, dass die gewählte Antwort unten eigentlich nicht die Frage beantworten, da 'HEROKU_APP_NAME' wird' purplebinder- pr-27' in deinem Fall, nicht die vollständige URL. Ich fand auch das, was eine Erklärung der "Generator" Kommentar in der Dokumentation gibt: https://devcenter.heroku.com/articles/app-json-schema – woodardj

Antwort

8

Von https://devcenter.heroku.com/articles/github-integration-review-apps#heroku_app_name-and-heroku_parent_app_name:

mit Scripting ist zu helfen, zwei spezielle Konfigurations Vars Bewertung Apps zur Verfügung. Wenn Sie HEROKU_APP_NAME oder HEROKU_PARENT_APP_NAME nach Bedarf oder optionale Konfigurationsdateien in Ihrer app.json Datei angeben, legt Heroku diese Konfigurationsvariablen auf den neuen Anwendungsnamen und den übergeordneten Anwendungsnamen fest. Sie stehen dann für die Verwendung in das Postdeploy-Skript zur Verfügung, so dass Sie erweiterte Bootstrapping und Konfiguration ausführen können.

Hier ist ein Beispiel app.json-Datei, die HEROKU_APP_NAME und HEROKU_PARENT_APP_NAME verwendet:

{ 
    "name":"Advanced App", 
    "scripts": { 
     "postdeploy": "rake db:setup && bin/bootstrap" 
    }, 
    "env": { 
     "HEROKU_APP_NAME": { 
      "required": true 
     }, 
     "HEROKU_PARENT_APP_NAME": { 
      "required": true 
     } 
    } 
} 
+1

FYI, 'HEROKU_APP_NAME' ist nur der Name. zB 'my-app' nicht' my-app.herokuapp.com', so dass Sie den Rest '.herokuapp.com' manuell anhängen müssen, um eine verwendbare URL zu erhalten. – aNoble

+1

Was ist der Inhalt von 'bin/bootstrap' in diesem Beispiel? Ich kann nicht scheinen, Heroku ENV-Variablen aus der App heraus zu setzen. – toobulkeh

1

Hier ist ein Ansatz zu ignorieren app.json für Rails Installationen:

in der relativen config/<environment>.rb. Ich persönlich verwende production.rb und staging verweist nur darauf.

if ENV.fetch("HEROKU_APP_NAME", "").include?("staging-pr-") 
    ENV["APPLICATION_HOST"] = ENV["HEROKU_APP_NAME"] + ".herokuapp.com" 
    ENV["ASSET_HOST"] = "https://" + ENV["APPLICATION_HOST"] 
    config.action_mailer.default_url_options = { host: ENV.fetch("APPLICATION_HOST") } 
end 
... 

Es ist ein bisschen irreführend, da die Heroku-Umgebungsvariablen immer noch die alten Variablen haben, aber es funktioniert.

+0

Müssen Sie nicht auch HEROKU_APP_NAME und HEROKU_PARENT_APP_NAME in der app.json hinzufügen, damit sie in Ihren Ruby-Skripten deklariert werden? –

0

Sie können auch eine review Umgebung für Ihre Anwendung erstellen, indem Sie staging.rb oder production.rb von config/environments kopieren. Dies wäre nützlich.

Nach dem Hinzufügen HEROKU_APP_NAME und HEROKU_PARENT_APP_NAME zu Ihrem app.json, können Sie einfach einstellen;

config.action_mailer.default_url_options = { host: "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" } 
config.action_mailer.asset_host = "http://#{ENV['HEROKU_APP_NAME']}.herokuapp.com" 
config.action_controller.asset_host = "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" 
config.action_cable.url = "wss://#{ENV['HEROKU_APP_NAME']}.herokuapp.com/cable" 
3

Wenn Sie die heroku-buildpack-cli zu Ihren Eltern App hinzufügen, dann ermöglicht es Ihnen Umgebungsvariablen aus Ihrem post-deploy script einzustellen. Der Befehl soll in etwa wie folgt aussehen:

heroku config:set HOST_NAME=${HEROKU_APP_NAME}.herokuapp.com --app ${HEROKU_APP_NAME} 
Verwandte Themen