我试图将Ghost 1.2.0部署到Heroku。使用以前版本的Ghost(< = 0.11.x),他们使用了foreach ($_POST as $key => $value) {
// do some stuff
}
文件,您可以这样做:
config.js
但是在这个版本中,他们使用nconf
替换此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
}, …
来替换config.js
等依赖于环境的JSON文件。
与JS对象不同的JSON文件不能将vars作为值。我可以将我的凭据硬编码到JSON文件,但我不想这样做,因为:
在深入了解config.production.json
README和issues之后,我明白可以模仿这个预期的nconf
对象:
database
将vars定义为:
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...
它有效。我可以尝试(并且我会)修改Ghost脚本以这种方式读取所有变量,但只要它需要一个nconf.get('DATABASE__CLIENT'); // postgres
对象就可以让它以正确的方式工作。
那么,是否有人想出如何使用Heroku的env vars正确地重新创建一个对象?
答案 0 :(得分:0)
我终于找到了解决方案。
除非你想修改nconf.env(settings)
之类的:
nconf.env({
separator: '__', // Two dashes
lowerCase: true
});
这样就可以将
lowerCase: true
传递给env()
,这样如果环境变量被称为SOMETHING或SOME,那么它也可以使用[Source]
我建议使用已经小写的env vars。
所以,
heroku config:set database__client=postgres
将使用以下内容阅读:
nconf.get('database:client');
看起来nconf
有一个不同的字符分隔符来定义名为separator
的嵌套变量,另一个用于读取它们称为logicalSeparator
(其默认值为:
)