3

好的,我是节点新手,实际上只是使用节点服务器来提供静态 js,但我在任何地方都找不到任何信息。

我正在运行一个应用程序ember app kit,它被构建到一个节点server.js以进行部署,heroku 使用node server.js.

它使用grunt进行构建、测试等。

我想知道如何指定可以被 heroku 配置变量覆盖的配置变量(即身份验证令牌)。

我能得到的最接近的是一个自定义任务,它读取环境变量并写出一个内置到站点中的 json 文件(并分配给一个全局变量)。这在本地有效,但不考虑 heroku 配置。

我什至编写了一个部署脚本,它获取 heroku 的配置,将它们作为环境变量导出到本地,然后进行构建——这很有效,但配置仅在 app deploy上更新。因此,如果我执行,我的应用程序直到下次部署应用程序时heroku config:add CONFIG_TEST=test_value才会看到该值。CONFIG_TEST

我希望我的应用程序立即开始将该配置值嵌入到浏览器 JS 中。

有什么方法可以按照我的应用程序的设置方式使用节点执行此操作吗?

4

2 回答 2

1

我不确定我是否理解在运行时从环境中获取配置变量有什么问题。在您的代码中使用 process.env.KEY,并将该结果嵌入到您可能拥有的任何模板中,并将其作为结果提供。

当您更改 Heroku 配置变量时,您的进程会重新启动,因此它会获取新值。

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

于 2013-08-14T06:51:11.860 回答
0

好的,这里有一个使用 grunt-sed 的 ember-app-kit 解决方案。

在 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 

它将用环境变量中的任何内容替换“{{env.API_BASE_PATH}}”。

于 2014-02-07T00:27:27.077 回答