2014-10-16 51 views
20

如何將環境變量從bashrc傳遞到Ember CLI。我想象一種情況,你需要stripe api keys或pusher api key,並且你在bashrc中的環境變量中有它們。你如何將api-keys傳遞給Ember CLI?如何使用process.env將環境變量中的API密鑰傳遞給Ember CLI?

我嘗試在brocfile.jsenvironment.js中都使用Node.js process.env,但是當我嘗試在Ember JS控制器中訪問它時,該屬性爲空。

在我environment.js文件我加了,

APP: { apiKey: process.env.KEY } 

在我的餘燼JS控制器我試圖訪問它:

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

並設置控制器屬性lkey,如下圖所示,哪些不起作用:

lkey: config.App.KEY 

下一頁我brocfile.js,我說:

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

這仍然沒有奏效。

+0

燼軌不燼-CLI BTW – jakecraige 2014-10-16 16:33:51

+0

我知道,你可以看到他們的名字是不同的,所以我知道他們是不同的。我的例子顯示了在使用ember-rails時該怎麼做,而我正在問怎麼用ember-cli。看到我的問題的最後一行。 – brg 2014-10-16 16:41:40

+0

像這樣的東西可能需要綁定到ember-cli的構建過程或environment.js文件中。一個快速和骯髒的方法是隻使用environment.js文件中的節點來讀取存儲在Rails應用程序中的密鑰,並將它們添加到應用程序的環境配置中。 – jakecraige 2014-10-16 16:46:23

回答

35

我終於解決了這個問題。我面臨兩個選擇。選項1是使用XHR從服務器上的端點獲取api-keys。選項2是使用Nodejs process.env直接從環境變量中獲取api-key。我更喜歡選項2,因爲它可以幫助我避免執行XHR請求。

您可以使用此燼-CLI-插件依賴於的NodeJS Dotenv項目

在我的情況下,應該選擇2我選擇這樣做沒有任何加上。

  1. 如果您是Ubuntu或您自己的Linux發行版的適當位置,請首先將api-key添加到您的.bashrc
export API_KEY=NwPyhL5 
  • 重新加載.bashrc文件,所以你的設置被拾取:
  • source ~/.bashrc 
    
  • 在Ember CLI中,將屬性添加到config/environment.js中的ENV對象中。默認看起來像這樣
  • module.exports = function(environment) { 
        var ENV = { 
        modulePrefix: 'rails-em-cli', 
        environment: environment, 
        baseURL: '/', 
        locationType: 'auto', 
        EmberENV: { 
    
         } 
        } 
    

    我們認爲ENV對象,我們可以添加一個新的屬性myApiKey這樣的:

    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; 
         }    
    
        } 
    

    注意process.env。 API_KEY正在獲取我們添加到.bashrc的設置並將其分配給myApiKey。您需要在您的服務器上安裝Nodejs,以便process.env正常工作。

    最後訪問該變量在你的控制器,你做

    import config from '../config/environment'; 
    import Ember from 'ember'; 
    
    export default Ember.Controller.extend({ 
    
        yourKey: config.myApikey, 
    
    }); 
    

    就是這樣。

    +0

    在我這邊沒有任何這些燼插件需要。 'process.env.API_KEY'就夠了! – 2017-11-20 14:35:38

    5

    您也可以在ENV.APP對象上設置變量:它們將由應用程序實例攜帶。

    然後,您可以重新使用它們在初始化程序&等內。

    這樣,您不必將config/environment導入到應用程序的代碼中,這對我來說似乎有點奇怪。

    +1

    您是否還可以添加如何使用應用程序實例訪問它的示例?你的意思是使用'this.container.lookup('application:main')'? – roberkules 2015-04-07 23:36:45

    +0

    是的,這就是我的意思。 – 2015-04-14 13:36:15

    2

    關鍵是要在config/environment.js中定義ENV變量,並且當您需要在某處(即適配器,控制器等)訪問它們時,首先導入config/environment.js

    對於Ember CLI應用程序,https://ember-cli.com/user-guide/#Environments記錄此信息以供參考。

    樣的邏輯:

    # 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

    該頁面的新鏈接是http://ember-cli.com/user-guide/#Environments – 2016-01-04 17:38:03

    3

    我想確保我的API密鑰不檢查作爲構建過程的一部分,我複製一個本地配置文件到config目錄並將其加載到environment.js

    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"); 
    } 
    

    local_environment.js(未簽入,通過構建複製過程)

    exports.config = { 
        SOME_API_KEY: 'key_here' 
    }; 
    
    相關問題