2016-01-12 13 views
5

Ist es möglich, eine Heroku-Umgebungsvariable ohne Neustart der App?Set Heroku Umgebungsvariable ohne Neustart App

Meine App verbindet sich über OAuth2 mit verschiedenen Online-Diensten. Für jeden Dienst, mit dem ich mich verbinde, muss ich eine OAuth2-ID und einen geheimen Schlüssel festlegen. Um diese Konfigurationsvariablen außerhalb meines Codes zu halten, verwende ich Umgebungsvariablen und lese sie unter process.env (node.js) ein.

Jedes Mal, wenn ich meiner App einen neuen Dienst hinzufüge, muss ich die entsprechenden Umgebungsvariablen für die ID und das Geheimnis hinzufügen. Ich muss dies tun, bevor ich den neuesten Code einlege, damit die OAuth2-ID und geheime Variablen verfügbar sind, wenn die App als nächstes mit der neuen Dienstverbindung startet.

Derzeit mein Workflow ist wie folgt:

  1. die Umgebungsvariablen Stellen Sie die Heroku toolbelt mit: heroku config:set <SERVICE>_ID=foo <SERVICE>_SECRET=bar
  2. Drücken Sie den neuesten Code: git push heroku master

Derzeit beide dieser Operationen wird neu gestartet die App. Ich würde wirklich die erste Operation bevorzugen, um die App nicht neu zu starten, da die Änderungen an diesen Konfigurationsvariablen erst ab Schritt 2 wirksam werden müssen. Durch den Neustart bei Schritt 1) ​​wird meine App unnötige Ausfallzeiten erleben.

Also, gibt es eine Möglichkeit, Schritt 1) ​​daran zu hindern, die App neu zu starten?

+1

Sie können Umgebungsvariablen für einen laufenden Prozess nicht ändern. Sie konnten es nur innerhalb der App manipulieren. Wenn Sie jedoch eine Umgebungsvariable ändern müssen, während die App bereits ausgeführt wird, machen Sie trotzdem etwas falsch. – poke

+0

Vielen Dank für den Kommentar, aber wenn Sie bemerken, bin ich tatsächlich eine Umgebungsvariable hinzufügen, nicht ändern eine vorhandene. Ich glaube also nicht, dass das etwas Falsches ist? – fiznool

+0

Sie legen einen Dienstgeheimnis fest, nachdem die Anwendung bereits ausgeführt wird. Ein Dienstgeheimnis ist für mich eine Konfiguration, die sich während der Ausführung der Anwendung nicht ändern sollte. – poke

Antwort

3

Nach this article heißt es ziemlich ausdrücklich, dass

Jedes Mal, wenn Sie eine Config var setzen oder entfernen, wird Ihre Anwendung neu gestartet werden.

Persönlich wünschte ich auch, es gäbe einen Weg zu tun, was Sie fragen. Bei größeren Anwendungen kann ein systemweiter Neustart schwierig sein, wenn viele Prozesstypen ausgeführt werden. Häufig setze ich Umgebungsvariablen, die für die App nicht entscheidend sind, sofort wieder, z. B. mit zukünftiger Funktionalität, oder Einstellungen, die den alten Wert aufweisen, aber den neuen Wert bei einem Rolling-Neustart übernehmen sollen Mode.