Я использую Play! 2.0 Издание Scala на Heroku. Heroku, похоже, не видит/не использует все мои переменные конфигурации в Procfile.Play 2.0 Экзамен Scala Heroku не видит каждую переменную в Procfile
Например, в моем application.conf у меня есть следующие переменные (среди прочих):
mongodb.default.db = "nyancat"
mongodb.default.host = "localhost"
mongodb.default.port = 27017
Они должны быть по умолчанию для местного развития. Тем не менее, я хочу, чтобы экземпляр Heroku использовал экземпляр MongoLabs. (К сожалению, Salat не конфигурирует с URI, так что мне пришлось разбить его на хост, порт, болтовня, т.е. MONGOLAB_URI не используется)
Мой PROCFILE теперь выглядит следующим образом:
☆ cat Procfile
web: target/start -Dsecurehostname="https://example.org" \
-Dhostname="http://example.org" -Dhttp.port=$PORT \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=$DATABASE_URL -Dredis=$REDISTOGO_URL \
-Dmailgun.apikey=$MAILGUN_API_KEY -Dmongodb.default.db="heroku_appXXXXXXX" \
-Dmongodb.default.host="dsXXXXXX.mongolab.com" -Dmongodb.default.port=XXXXX \
-Dmongodb.default.user="heroku_appXXXXXXX" \
-Dmongodb.default.password="foobared_not"
Я нажимаю и перезапускаю, но удаленное соединение MongoDB по-прежнему говорит, что оно подключается на локальном хосте: 27017
Redis и все остальное отлично работает и денди.
Удаленный журнал показывает это при запуске, и это явно не содержит все параметры в моем PROCFILE:
2012-05-20T19:35:18+00:00 heroku[web.1]: Starting process with command \
`target/start -Dhostname="https://example.org" -Dhttp.port=XXXXX \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=<HIDDEN> -Dredis=<HIDDEN> -Dmailgun.apikey=<HIDDEN>`
И.Э. нет mongo.*
параметров в любом месте журналов.
Пожалуйста, дайте мне знать, если мне что-то не хватает, спасибо, ребята.
UPDATE
Я пытался подражать Heroku локально, используя sbt stage
и запустить приложение с foreman start
. Я установить переменные окружения, которые бы быть установлены на Heroku, и запустить его так:
app git:(master) ☆ DATABASE_URL="jdbc:h2:mem:mydatabase;MODE=PostgreSQL" \
REDISTOGO_URL="redis://ignored:[email protected]:6379/" \
foreman start
20:20:27 web.1 | started with pid 43382
20:20:27 web.1 | Play server process ID is 43382
20:20:29 web.1 | [info] play - database [default] connected at jdbc:h2:mem:mydatabase
20:20:29 web.1 | [info] play - mongodb [default] connected at "heroku_appXXXXXXX"@"dsXXXXXX.mongolab.com":XXXXX/"heroku_appXXXXXXX"
20:20:30 web.1 | [info] play - Application started (Prod)
20:20:30 web.1 | [info] play - Listening for HTTP on port 5000...
бригадир поднимает мои ценности производства MongoDB, как это в PROCFILE, который проверяет мой аргумент, что Heroku, возможно, с помощью более старую версию моего Procfile по неизвестной причине.
На моем случае Heroku, то PROCFILE, безусловно, не имеет неизменного флаг установлен либо:
~ $ lsattr Procfile
------------------- Procfile
UPDATE 2
Я использую MongoDB Salat plugin for Play Framework 2 (Scala only).
Вот образец, который я взял:
Каждый толчок удалось, прежде чем я приступил к реализации поддержки MongoDB.
Затем я включил Salat plugin, подписался на учетную запись MongoLabs и начал забавляться. Плагин выше не поддерживает com.mongodb.MongoURI, и из-за того, как он разбирает конфигурацию, он взорвется, если вы дадите его -Dmongodb.uri
. Он ожидает ключевое слово, например «default».
Что возвращает нас к переключателям mongodb.default.*
, которые я использовал выше.
Теперь мой цикл развития выглядит следующим образом:
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
...
И самое раздражающе, отказавшего толчок просто регистрирует это:
Heroku push rejected due to an unrecognized error.
... и heroku logs -t
выход только показать это:
2012-05-22T07:23:59+00:00 heroku[slugc]: Slug compilation failed: unrecognized error
Это работает локально, кстати.
Я привёл все это к вниманию поддержки Heroku, так как это может быть так, что они проглатывают ошибки, вызванные Typesafe's Config, когда это может быть проще сделать с самого начала.
Я также попросил их не позволять этим вторым нажатиям преуспеть, но затем использовать старый файл Procfile. Очень вводящий в заблуждение.
Излишне говорить, что теперь я также поддерживаю поддержку MongoURI для плагина Salat.
UPDATE 3
I've implemented support для mongodb.default.uri
в Play! Плагин Salat (и развернул его с помощью lib /), но Heroku все равно выдает ошибку всякий раз, когда я нажимаю что-либо, связанное с mongo в моем Procfile.
Я попросил Героку поддержать тот же вопрос, и, возможно, кто-то здесь может ответить: делает ли Heroku переменные, которые вы можете использовать в Procfile?
У меня есть рабочий пример игры 2 + MongoDB здесь: https://github.com/jamesward/play2bars/tree/scala-mongodb Возможно, это поможет выяснить, почему это не работает. –
Спасибо, Джеймс, я сделаю это. В противном случае я увижу вас в четверг вечером в LFPUG :) – opyate
@JamesWard бит '' '-Dmongodb.uri = $ MONGOHQ_URL'': есть ли какое-либо значение для обозначения JVM-переключателей? То есть Heroku принимает только предварительно заданный список имен переменных? Те, что я использовал, назывались '' 'mongodb.default. *' ''. Я начинаю думать, что более старая версия моего Procfile кэшируется/используется. – opyate