Я пытаюсь развернуть Ghost 1.2.0 на Heroku. В предыдущих версиях Ghost (‹= 0.11.x) они использовали 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
.
Файлы JSON, в отличие от объектов JS, не могут иметь переменных в качестве значений. Я мог бы жестко записать свои учетные данные в файл JSON, но я не хочу этого делать, потому что:
- Мне кажется, это плохая практика, и
- Heroku периодически меняет учетные данные и обновляет приложения, к которым прикреплена эта база данных. (Цитируется из Heroku)
Покопавшись в nconf
README и issues Я понял, что можно было бы имитировать этот ожидаемый database
объект только с помощью:
nconf.env({
separator: '__' // Two dashes
});
и определение vars как:
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
, будет так здорово заставить его работать правильно.
Итак, кто-нибудь придумал, как правильно воссоздать объект с помощью env vars Heroku?