【问题标题】:How to read Heroku's nested process.env vars / object in nconf?如何在 nconf 中读取 Heroku 的嵌套 process.env 变量/对象?
【发布时间】:2017-08-02 00:17:30
【问题描述】:

我正在尝试将 Ghost 1.2.0 部署到 Heroku。对于以前版本的 Ghost (config.js 文件,您可以在其中执行以下操作:

database: {  
    client: 'postgres',
    connection: {
        host: process.env.POSTGRES_HOST,
        user: process.env.POSTGRES_USER,
        password: process.env.POSTGRES_PASSWORD,
        database: process.env.POSTGRES_DATABASE,
        port: process.env.POSTGRES_PORT
    },
    debug: false
}, …

但在这个版本中,他们使用 nconf 替换了 config.js 用于环境相关的 JSON 文件,例如 config.production.json。

与 JS 对象不同的 JSON 文件不能有 vars 作为值。我可以将我的凭据硬编码到 JSON 文件中,但我不想这样做,因为:

  1. 对我来说似乎是一种不好的做法,并且
  2. Heroku 会定期轮换凭据并更新附加此数据库的应用程序。(引自 Heroku)

在深入研究nconf README 和issues 之后,我了解到可以通过以下方式模仿这个预期的database 对象:

nconf.env({                                                                                                            
    separator: '__' // Two dashes
});

并将变量定义为:

heroku config:set DATABASE__CLIENT=postgres
heroku config:set DATABASE__CONNECTION__HOST=<value>
...

但是,无论如何,当我稍后致电时,我会收到undefined:

nconf.get('database');
nconf.get('DATABASE'); // In case it was case-sensitive...

相反,如果我打电话:

nconf.get('DATABASE__CLIENT'); // postgres

它有效。我可以尝试(并且我会)修改 Ghost 脚本来以这种方式读取所有变量,但只要它需要一个 database 对象,让它以正确的方式工作就会很酷。

那么,有人知道如何使用 Heroku 的 env vars 正确地重新创建对象吗?

【问题讨论】:

    标签: heroku environment-variables heroku-postgres nconf


    【解决方案1】:

    我终于找到了解决办法。

    除非你想修改nconf.env(settings)之类的:

    nconf.env({                                                                                                            
        separator: '__', // Two dashes
        lowerCase: true
    });
    

    这使得将lowerCase: true 传递给env() 成为可能,这样如果环境变量被称为SOMETHING 或SOMEthing,它也可以使用某些东西[Source]

    我建议使用已经小写的环境变量。

    所以,

    heroku config:set database__client=postgres
    

    将可以使用:

    nconf.get('database:client');
    

    看起来nconf 有一个不同的字符分隔符来定义称为separator 的嵌套变量和另一个读取它们的称为logicalSeparator(其默认值为:)

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2017-08-08
      • 2018-05-13
      相关资源
      最近更新 更多