2017-07-12 2 views
4

Ich habe vor kurzem eine React/Express App zu Heroku bereitgestellt, aber ich habe ein Problem mit Umgebungsvariablen, die Teil der gebauten App und der Heroku Deployment-Pipeline sind - in einem Kurz gesagt, die Werte der Umgebungsvariablen aus der App staging Release werden übertragen, wenn die Förderung zu production - die einzige Möglichkeit, dass ich die Umgebungsvariablen richtig setzen kann, ist die App direkt auf production zu schieben, die den Zweck der wirklich besiegt Bereitstellungs-Pipeline an erster Stelle. Hier ist eine Zusammenfassung des Szenarios:Heroku Pipeline - Staging env Variable in die Produktion

Die Umgebungsvariable in Frage API_URL, die in webpack.config.js wie so verwiesen wird:

plugins: [ 
    new webpack.DefinePlugin({ 
     'API_URL': JSON.stringify(process.env.API_URL || 'http://localhost:4000/api/v1') 
    }) 
] 

Die API ist selbst eine andere Heroku App mit staging und production Mitteilungen und so die Werte der API_URL Umgebungsvariable werden in meiner React app Heroku-Konfiguration als https://staging-api-12345.herokuapp.com/api/v1 bzw. https://production-api-12345.herokuapp.com/api/v1 festgelegt.

Wenn ich schiebe meine app Reagieren auf staging up, es funktioniert perfekt - aber wenn ich die App production und machen den ersten Aufruf der API zu fördern, ist es noch zeigt auf https://staging-api-12345.herokuapp.com/api/v1. Ok gut, ich verstehe, warum das der Fall ist - die App wurde gebaut, wenn sie an staging geschoben wird ... so versuchte ich, die App nach Förderung auf production neu aufzubauen, aber das hat nicht funktioniert, es verwendete immer noch die staging Umgebungsvariablen.

Gibt es bei Verwendung der Heroku-Bereitstellungspipeline eine Möglichkeit, den App-Slug neu zu erstellen, sodass er die verschiedenen Umgebungsvariablen abfängt?

Antwort

4

Sie können den Slug nicht neu erstellen, der Hauptpunkt von Pipelines besteht darin, denselben Slug zwischen Apps zu verschieben.

Was Sie tun müssen, ist API_URL zur Laufzeit und nicht während des Build-Prozesses zu holen. Sie können alle ENVs in einer Datei setzen, zum Beispiel env.js

export const API_URL = process.env.API_URL; 
export const OTHER_VAR = process.env.OTHER_VAR; 

und importieren Sie dann genau das, was Sie

import { API_URL, OTHER_VAR } from 'env.js'; 
+0

Große, vielen Dank für diesen Vorschlag in anderen Dateien benötigen. – skwidbreth

+0

Wie wäre es nur mit einer statischen App, die Express nicht verwendet? – morrislaptop

+0

Was ist dein Setup genau? Ich glaube, Sie können den gleichen Ansatz verwenden. Alles, was Sie tun müssen, ist sicherzustellen, dass Sie ENV zur Laufzeit holen und nicht während des Build-Prozesses. –

Verwandte Themen