Play не может прочитать конфигурационные переменные Heroku при разборе application.conf - PullRequest
2 голосов
/ 26 сентября 2011

Я развертываю приложение, написанное с помощью Play!Framework 1.2.3 для heroku (стек кедра), и я устанавливаю некоторые переменные окружения с помощью

heroku config:add DB_NAME="FOO"

Они устанавливаются в порядке (видно через конфигурацию heroku - app appname).Они читаются из кода как с помощью ручных вызовов System.getenv (), так и подстановок, выполняемых play при чтении application.conf с помощью механизма

morphia.db.name=${DB_NAME}

.Эта тактика хорошо работает локально, но на герою переменные среды, по-видимому, не читаются, и толчок к героку терпит неудачу, поскольку не может заменить переменные.Воспроизведение предупреждение:

WARNING: Cannot replace DB_NAME in configuration (morphia.db.name=${DB_NAME})

И он умирает, потому что не может подключиться к базе данных, что является фатальной ошибкой.В сообщении об ошибке также сообщается о попытке подключиться к $ {HOST}: $ {PORT}, поэтому подстановка здесь не выполняется.Я что-то здесь упускаю, или это просто не работает для Play!приложения на героку на данный момент?Как это сделать?

1 Ответ

4 голосов
/ 27 сентября 2011

Нажатие на Heroku инициирует прекомпиляцию вашего приложения Play, которое, в свою очередь, читает ваш файл application.conf. К сожалению, переменные конфигурации Heroku недоступны во время сборки, поэтому вы увидите те предупреждения, которые вы упомянули:

WARNING: Cannot replace VALUE in configuration (key=${VALUE})

Однако, это не должно вызывать сбой толчка. И при этом это не должно заставить Ваше приложение не работать. Во время выполнения Play перечитывает application.conf, и переменные конфигурации будут присутствовать, и их значения будут заменены.

Трудно сказать точно, что не так в этом случае. Одна вещь, которую вы можете попробовать, это запустить команды Play, как это делает Heroku, и посмотреть, что вы получите:

$ play precompile
$ play run --http.port=5000 --%prod -Dprecompiled=true

Обратите внимание, что отдельный этап предварительной компиляции и идентификатор инфраструктуры prod отличаются от того, если вы просто запускаете приложение локально, как показано ниже:

$ play run

Вы также можете зарегистрировать тикет с Heroku, и кто-то может взглянуть на ваше приложение.

По крайней мере, нам нужно избавиться от этих предупреждений, потому что вы не первый, кто это замечает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...