2014-10-16 13 views
20

Wie übergebe ich Umgebungsvariablen von Bashrc an Ember CLI. Ich stelle mir eine Situation vor, in der Sie Stripe-API-Schlüssel oder Pusher-API-Schlüssel benötigen, und Sie haben diese in Ihren Umgebungsvariablen in bashrc. Wie gibst du die api-Schlüssel an Ember CLI weiter?Wie API-Schlüssel in Umgebungsvariablen an Ember CLI mit process.env übergeben?

Ich habe versucht mit Node.js process.env in beiden brocfile.js und environment.js, aber wenn ich versuche, darauf im Ember JS-Controller zugreifen, ist die Eigenschaft null.

In meiner environment.js Datei, die ich hinzugefügt,

APP: { apiKey: process.env.KEY } 

In My Ember.js Controller habe ich versucht, es mit Zugriff auf:

import config from '../config/environment'; 

und Einstellen der Controller-Eigenschaft lkey wie unten gezeigt, was nicht funktioniert hat:

lkey: config.App.KEY 

nächste in meinen brocfile.js, fügte ich hinzu:

var limaKey = process.env.Key; 
var app = new EmberApp({key: limaKey}); 

Diese noch nicht funktioniert hat.

+0

ember Schienen ist nicht glut-cli btw – jakecraige

+0

Ich weiß, dass und Sie könnten ihre Namen sind anders zu sehen, so dass ich weiß, dass sie anders sind. Mein Beispiel zeigt, wie man es macht, wenn man ember-rails benutzt und ich frage, wie es mit ember-cli funktioniert. Siehe die letzte Zeile meiner Frage. – brg

+0

So etwas müsste wahrscheinlich in den Build-Prozess von ember-cli oder in die Datei environment.js eingebunden werden. Ein schneller und schmutziger Weg wäre, einfach den Knoten in der Datei environment.js zu verwenden, um zu lesen, wo immer Sie die Schlüssel in der App rails gespeichert haben, und sie in die Umgebungskonfiguration der App einzufügen. – jakecraige

Antwort

35

Ich habe dieses Problem endlich gelöst. Ich hatte zwei Möglichkeiten. Option 1 war, XHR zu verwenden, um die API-Schlüssel von einem Endpunkt auf dem Server abzurufen. Option 2 ist, den API-Schlüssel direkt von Umgebungsvariablen mit Nodejs process.env zu erhalten. Ich bevorzuge Option 2, weil es mich davor bewahrt, eine XHR-Anfrage zu machen.

Sie erhalten können 2 Option durch diesen ember-cli-AddOn, die auf Projekt NodeJS Dotenv

In meinem Fall hängt ich wählen, es zu tun, ohne dass Erweiterung.

  1. zuerst den api-Schlüssel zu Ihrem .bashrc hinzufügen, wenn Sie Ubuntu oder der approapriate Platz für Ihre eigene Linux-Distribution sind.
export API_KEY=NwPyhL5 
  1. neu laden die .bashrc Datei, so werden Sie Ihre Einstellung aufgenommen:
source ~/.bashrc 
  1. Fügen Sie in Ember CLI dem Objekt ENV in config/environment.js eine Eigenschaft hinzu.Der Standard sieht wie folgt aus
module.exports = function(environment) { 
    var ENV = { 
    modulePrefix: 'rails-em-cli', 
    environment: environment, 
    baseURL: '/', 
    locationType: 'auto', 
    EmberENV: { 

     } 
    } 

Nun zu diesem ENV Objekt, können wir eine neue Eigenschaft myApiKey wie folgt hinzu:

module.exports = function(environment) { 
    var ENV = { 
    modulePrefix: 'rails-em-cli', 
    environment: environment, 
    baseURL: '/', 
    locationType: 'auto', 
    myApikey: null, 
    EmberENV: { 

    } 

    //assign a value to the myApiKey 

    if (environment === 'development') { 
     // ENV.APP.LOG_RESOLVER = true; 

     ENV.myApiKey = process.env.API_KEY; 
     }    

    } 

Beachten Sie, dass process.env. API_KEY ruft die Einstellung ab, die wir .bashrc hinzugefügt haben, und weist sie myApiKey zu. Sie müssen Nodejs auf Ihrem Server installiert haben, damit process.env funktioniert.

Schließlich diese Variable in Ihrem Controller für den Zugriff auf Sie

import config from '../config/environment'; 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    yourKey: config.myApikey, 

}); 

tun, was es ist.

+0

Keine Notwendigkeit für diese Ember Addons auf meiner Seite. 'process.env.API_KEY' war genug! –

5

Sie können die Variablen auch auf das Objekt ENV.APP setzen: Sie werden von der Anwendungsinstanz übernommen.

Sie können sie dann wieder in Initialisierer & so weiter verwenden.

Auf diese Weise müssen Sie config/environment nicht in den Code der Anwendung importieren, was mir etwas komisch vorkommt.

+1

könnten Sie auch ein Beispiel hinzufügen, wie Sie mit der App-Instanz darauf zugreifen können? meinst du, 'this.container.lookup ('application: main')' '? – roberkules

+0

Yep, das ist in der Tat, was ich meinte. –

2

Der Schlüssel besteht darin, die ENV-Variablen in config/environment.js zu definieren, und wenn Sie irgendwo darauf zugreifen müssen (d. H. Adapter, Controller usw.), importieren Sie zuerst config/environment.js.

Für eine Ember CLI App dokumentiert https://ember-cli.com/user-guide/#Environments dies als Referenz.

Beispiel Logik:

# app/controllers/foobar.js 
import DS from 'ember-data'; 
import ENV from 'nameOfApp/config/environment'; 

export default Ember.Controller.extend({ 
    actions: { 
    click: function() { 
     console.log(ENV.SOME_ENVIRONMENT_KEY); 
    } 
    } 
}); 

# config/environment.js 
module.exports = function(environment) { 
    .... 

    if (environment === 'development') { 
    ENV.SOME_ENVIRONMENT_KEY = 'asdf1234'; 
    } 

    ... 
}; 
+2

Neuer Link für diese Seite ist http://ember-cli.com/user-guide/#Environments –

3

ich sicherstellen möchten, dass meine API-Schlüssel sind nicht eingecheckt Als Teil des Build-Prozesses, kopiere ich eine lokale Konfigurationsdatei in das config Verzeichnis und laden Sie es in environment.js.

in environment.js

try { 
    var local = require('./local_environment'); 
    Object.keys(local.config).forEach(function(key) { 
    ENV[key] = local.config[key]; 
    }); 
} catch(err) { 
    console.log("config/local_environment.js not found"); 
} 

in local_environment.js (nicht im aufgegebenen, durch Build kopiert Prozess)

exports.config = { 
    SOME_API_KEY: 'key_here' 
};