Kategorien
Zuletzt aktualisiert am 09. März 2020
Eine einzelne App wird immer in mehreren Umgebungen ausgeführt, zumindest auf Ihrem Entwicklungscomputer und in der Produktion auf Heroku. Eine Open-Source-App kann in Hunderten von verschiedenen Umgebungen bereitgestellt werden.
Obwohl diese Umgebungen möglicherweise alle denselben Code ausführen, haben sie normalerweise umgebungsspezifische Konfigurationen. Beispielsweise können die Staging- und Produktionsumgebungen einer App unterschiedliche Amazon S3-Buckets verwenden, was bedeutet, dass sie auch unterschiedliche Anmeldeinformationen für diese Buckets benötigen.
Die umgebungsspezifische Konfiguration einer App sollte in Umgebungsvariablen gespeichert werden (nicht im Quellcode der App). Auf diese Weise können Sie die Konfiguration jeder Umgebung isoliert ändern und verhindern, dass sichere Anmeldeinformationen in der Versionskontrolle gespeichert werden. Erfahren Sie mehr über das Speichern von config in der Umgebung.
Auf einem herkömmlichen Host oder wenn Sie lokal arbeiten, legen Sie häufig Umgebungsvariablen in Ihrer .bashrc
-Datei fest. Auf Heroku verwenden Sie Konfigurationsvariablen.
- Verwalten von Konfigurationsvariablen
- Verwenden der Heroku-CLI
- Aktuelle Konfigurationsvariablen anzeigen
- Legen Sie eine Konfigurationsvariable fest
- Entfernen Sie eine Konfigurationsvariable
- Verwenden des Heroku-Dashboards
- Verwenden der Plattform-API
- Zugriff auf Konfigurationsvariablenwerte aus dem Code
- Beispiele
- Config var-Richtlinien
- Add-Ons und Konfigurationsvariablen
- Lokales Setup
- Produktions- und Entwicklungsmodi
Verwalten von Konfigurationsvariablen
Wenn Sie eine Konfigurationsvariable mit einer beliebigen Methode festlegen oder entfernen, wird Ihre App neu gestartet und eine neue Version erstellt.
Config var-Werte sind persistent – sie bleiben über Bereitstellungen und App-Neustarts hinweg bestehen. Wenn Sie einen Wert nicht ändern müssen, müssen Sie ihn nur einmal festlegen.
Verwenden der Heroku-CLI
Mit den heroku config
-Befehlen der Heroku-CLI können Sie die Konfigurationsvariablen Ihrer App einfach verwalten.
Aktuelle Konfigurationsvariablen anzeigen
$ heroku configGITHUB_USERNAME: joesmithOTHER_VAR: production$ heroku config:get GITHUB_USERNAMEjoesmith
Legen Sie eine Konfigurationsvariable fest
$ heroku config:set GITHUB_USERNAME=joesmithAdding config vars and restarting myapp... done, v12GITHUB_USERNAME: joesmith
Entfernen Sie eine Konfigurationsvariable
$ heroku config:unset GITHUB_USERNAMEUnsetting GITHUB_USERNAME and restarting myapp... done, v13
Verwenden des Heroku-Dashboards
Sie können Konfigurationsvariablen auch auf der Registerkarte Settings
Ihrer App im Heroku-Dashboard bearbeiten:
Verwenden der Plattform-API
Sie können die Konfigurationsvariablen Ihrer App programmgesteuert mit der Heroku-Plattform-API mithilfe eines einfachen HTTPS-REST-Clients und JSON-Datenstrukturen verwalten. Sie benötigen ein gültiges Heroku-Zugriffstoken, das einen Benutzer mit den richtigen Berechtigungen für die App darstellt.
Zugriff auf Konfigurationsvariablenwerte aus dem Code
Konfigurationsvariablen werden dem Code Ihrer App als Umgebungsvariablen ausgesetzt. Zum Beispiel in Knoten.js Sie können mit process.env.DATABASE_URL
auf die DATABASE_URL
-Konfigurationsvariable Ihrer App zugreifen.
Beispiele
Fügen Sie einige Konfigurationsvariablen für Ihre S3-Kontoschlüssel hinzu:
$ cd myapp$ heroku config:set S3_KEY=8N029N81 S3_SECRET=9s83109d3+583493190Setting config vars and restarting myapp... done, v14S3_KEY: 8N029N81S3_SECRET: 9s83109d3+583493190
Richten Sie Ihren Code so ein, dass er die Variablen zur Laufzeit liest. In Ruby greifen Sie beispielsweise mit dem Muster ENV
auf die Umgebungsvariablen zu – jetzt können Sie einen Initialisierer wie folgt schreiben:
AWS::S3::Base.establish_connection!( :access_key_id => ENV, :secret_access_key => ENV)
In Knoten.js, verwenden Sie process.env
, um auf Umgebungsvariablen zuzugreifen:
const aws = require('aws-sdk');let s3 = new aws.S3({ accessKeyId: process.env.S3_KEY, secretAccessKey: process.env.S3_SECRET});
In Java können Sie über Aufrufe von System.getenv('key')
wie folgt darauf zugreifen:
S3Handler = new S3Handler(System.getenv("S3_KEY"), System.getenv("S3_SECRET"))
In Python mit der Boto-Bibliothek:
from boto.s3.connection import S3Connections3 = S3Connection(os.environ, os.environ)
Bei der Bereitstellung in Heroku verwendet die App nun die in der Konfiguration festgelegten Schlüssel.
Config var-Richtlinien
- Config var-Schlüssel sollten nur alphanumerische Zeichen und den Unterstrich (
_
) verwenden, um sicherzustellen, dass sie von allen Programmiersprachen aus zugänglich sind. Konfigurationsvariablenschlüssel sollten das Bindestrich-Zeichen nicht enthalten. - Config var-Daten (die Kombination aller Schlüssel und Werte) dürfen 32 KB für jede App nicht überschreiten.
- Konfigurationsvariablenschlüssel sollten nicht mit einem doppelten Unterstrich beginnen (
__
). - Der Schlüssel einer Konfigurationsvariablen sollte nicht mit
HEROKU_
beginnen, es sei denn, er wird von der Heroku-Plattform selbst festgelegt.
Add-Ons und Konfigurationsvariablen
Wenn Sie ein Add-On für Ihre App bereitstellen, werden der App normalerweise eine oder mehrere Konfigurationsvariablen hinzugefügt. Die Werte dieser Konfigurationsvariablen können jederzeit vom Add-On-Anbieter aktualisiert werden.
Weitere Informationen zu Add-Ons und deren Verwendung von Konfigurationsvariablen finden Sie unter Add-On-Werte können sich ändern.
Lokales Setup
Verwenden Sie das lokale Heroku-Befehlszeilentool, um Ihre App lokal auszuführen.
Produktions- und Entwicklungsmodi
Viele Sprachen und Frameworks unterstützen einen Entwicklungsmodus. Dies ermöglicht in der Regel mehr Debugging sowie dynamisches Neuladen oder Neukompilieren geänderter Quelldateien.
In einer Ruby-Umgebung können Sie beispielsweise eine RACK_ENV
-Konfigurationsvariable auf development
setzen, um einen solchen Modus zu aktivieren.
Es ist wichtig, diese Konfigurationsvariablen in einer Produktions-Heroku-App zu verstehen und zu verfolgen. Während ein Entwicklungsmodus normalerweise für die Entwicklung geeignet ist, ist er für die Produktion nicht so geeignet, da er die Leistung beeinträchtigen kann.