2017-04-27 2 views
5

Ich verwende Cloud Functions für Firebase mit drei verschiedenen Projekten für Entwicklungs-, Test- und Produktionszwecke. Jedes Projekt hat ein service-account.json. Als ich die Quellen zu einer Umgebung bereitstellen, sieht die Initialisierung wie folgt aus:Firebase-Konfiguration für mehrere Projekte/Umgebungen

var serviceAccount = require("./service-account-dev.json"); 

firebase.initializeApp({ 
    credential: firebase.credential.cert(serviceAccount), 
    databaseURL: "https://nwDEV.firebaseio.com" 
}); 

Dies ist ein bisschen schwierig zu handhaben, weil ich den Code jedes Mal ändern muss ich in eine andere Umgebung bereitstellen möchten. Gibt es eine Möglichkeit, eine Gesamtkonfiguration zu haben, z. in firebase.json oder.firebasesrc, die es erlaubt, das service-konto zu integrieren und entscheide über die bereitstellung welcher konfiguration?

Sonst gibt es eine Möglichkeit zu erkennen, unter welcher Umgebung der Code ausgeführt wird und die spezifische service-account.json zu laden und die DatenbankURL-Eigenschaft zu setzen?

+0

https://firebase.google.com/docs/functions/config-env –

+0

Okay, so gibt es keine integrierte in alternativen verschiedenen Projekten zu verwalten als eine Umgebung Eigenschaft in der CLI-Einstellung? – user7930645

+0

Wenn Sie auf verschiedenen Computern bereitstellen, hätte ich gedacht, Sie könnten einfach ein if-else basierend auf dem 'window.location' verwenden. –

Antwort

2

Sie können Umgebungsvariablen verwenden. https://firebase.google.com/docs/functions/config-env

  1. Wählen Sie das Projekt (Sie den Befehl Feuerbasis Liste verwenden können, sie zu sehen): firebase use my-project-development

  2. Stellen Sie eine Umgebungsvariable firebase functions:config:set app.environment="dev"

  3. In Ihrer Funktionen Datei gelten eine Bedingung, um die Datei zu wählen: const serviceAccount = functions.config().app.environment === 'dev' ? 'credentials-dev.json' : 'credentials-prod.json';

Dann können Sie die Datei je nach Projekt verwenden:

firebase.initializeApp({ 
    credential: firebase.credential.cert(serviceAccount), 
    databaseURL: "https://nwDEV.firebaseio.com" 
}); 
+0

Wenn es ein Projekt von node.js ist, verwendet es in den meisten Fällen 'process.env.NODE_ENV ==' production'' Aber wir können 'process.env' vom Firebase-Server nicht ändern, daher müssen wir' firebase functions: config verwenden : setze some.key = "value" 'als Diegos Antwort. Dies sollte als Antwort akzeptiert werden. – wonsuc

+0

Und ich ziehe ähnliche 'Funktionen zu nutzen: config: set app.env = "dev"' oder 'Funktionen: config: set app.env = "prd"' – wonsuc

0

Von dem, was ich Ihre Frage verstehen, was Sie suchen, zu einer Lösung läuft darauf hinaus, die Cloud-Funktionen übersetzen Sie bereitstellen die entsprechenden Einstellungen, dh Produktion, Entwicklung und Test, von denen ich annehme, dass jede davon ein einzigartiges Projekt und somit eine Datenbank in Ihrer Firebase-Umgebung ist.

Wenn das Obige wahr ist, dann sollte das folgende helfen.

Firebase Cloud-Funktionen und allgemein CLI können für ein bestimmtes Projekt in Ihrer Firebase-Umgebung bereitgestellt werden. Führen Sie dazu im Terminal im Verzeichnis der Cloud-Funktionen den folgenden Befehl aus.

$ firebase use -add 

Dies ermöglicht Ihnen, Ihr weiteres Projekt (zum Beispiel Entwicklung) zu holen und es einen Aliasnamen zuweisen (I „Entwicklung“ empfehlen, wenn es als solches ist). Beim Deployment Ihrer Funktionen können Sie dann mithilfe des Alias ​​auswählen, welches Projekt (und damit welche Datenbank) bereitgestellt werden soll.

$ firebase use default # sets environment to the default alias 
    $ firebase use development # sets environment to the development alias 

Weitere Informationen finden Sie unter: https://firebase.googleblog.com/2016/07/deploy-to-multiple-environments-with.html

Eine Sache, die Sie tun müssen, kann dies die Standardkonfigurationseinstellungen für Cloud-Funktionen nutzen würde zu arbeiten.

$ admin.initializeApp(functions.config().firebase); 
+0

Fehler: Credential Implementierung initializeApp vorgesehen() über die " Berechtigung "Eigenschaft verfügt nicht über ausreichende Berechtigung, um auf die angeforderte Ressource zuzugreifen. Details zur Authentifizierung dieses SDK mit den entsprechenden Berechtigungen finden Sie unter https://firebase.google.com/docs/admin/setup. bei FirebaseAuthError.FirebaseError [als Konstruktor] –