我如何在heroku上设置一个节点应用程序(ember app kit)来读取ENVvariables,并使值可用于应用程序?

好吧,我是新来的节点,真的只是使用节点服务器来服务静态js,但我无法find任何地方的任何信息。

我正在运行一个应用程序应用程序套件 ,它被构build到一个节点server.js进行部署,而heroku则通过node server.js运行它。

它使用grunt来build造,testing等

我想知道如何指定可以被herokuconfigurationvariables覆盖的configurationvariables(即authentication令牌)。

最近我已经能够得到一个自定义的任务,读取环境variables,并写出一个json文件内置到网站(并分配给全局variables)。 这在本地工作,但不考虑herokuconfiguration。

我甚至写了一个部署脚本来获取heroku的configuration文件,将它们作为环境variables导出到本地,然后执行构build – 这可行的,但configuration只会在应用程序部署中更新。 所以,如果我做一个heroku config:add CONFIG_TEST=test_value ,我的应用程序不会看到CONFIG_TEST值,直到下次我部署应用程序。

我想让我的应用程序立即开始在浏览器JS中embedded该configuration值。

任何方式来做到这一点与我的应用程序设置的方式吗?

我不确定在运行时从环境中简单地获取configurationvariables是什么问题。 在代码中使用process.env.KEY,并将结果embedded到您可能具有的任何模板中,并将其作为结果。

当您更改Herokuconfigurationvariables时,您的进程将重新启动,因此它会启动新的值。

问题是您提供静态文件的事实吗? 如果是这样 – 你可以简单地改变它,让你使用模板引擎在服务之前做一些处理?

好的,下面是使用grunt-sed的ember-app-kit解决scheme。

在EMBER_APP_KIT_PROJECT / tasks / options / sed.js中

添加一些像

 module.exports = { version: { path: "./dist/", pattern: '{{env.API_BASE_PATH}}', replacement: function(){ return process.env.API_BASE_PATH; }, recursive: true } }; 

然后在你的代码中放入

 "{{env.API_BASE_PATH}}" 

现在,当你跑步

 $ grunt sed 

它将用环境variables中的任何内容replace“{{env.API_BASE_PATH}}”。

Interesting Posts