私はプレイを使用しています!Heroku の 2.0 Scala エディション。Heroku は、Procfile 内のすべての構成変数を表示/使用していないようです。
たとえば、私の application.conf には、(特に) 次の変数があります。
mongodb.default.db = "nyancat"
mongodb.default.host = "localhost"
mongodb.default.port = 27017
これらは、ローカル開発のデフォルトである必要があります。しかし、Heroku インスタンスで MongoLabs インスタンスを使用したいと考えています。(残念ながら、Salat は URI を使用して構成しないため、ホスト、ポート、yada yada に分解する必要がありました。つまり、MONGOLAB_URI は使用されていません)
私のProfileは次のようになります。
☆ 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 接続はまだ localhost: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.*
つまり、ログのどこにもパラメーターはありません。
何か不足している場合はお知らせください。ありがとうございます。
アップデート
sbt stage
でアプリを使用して実行し、Heroku をローカルでエミュレートしようとしましたforeman start
。Heroku によって設定される環境変数を設定し、次のように実行します。
app git:(master) ☆ DATABASE_URL="jdbc:h2:mem:mydatabase;MODE=PostgreSQL" \
REDISTOGO_URL="redis://ignored:foobared@localhost: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...
foreman は私の PRODUCTION MongoDB の値を Procfile にあるとおりに取得します。これは、Heroku が何らかの理由で私の Procfile の古いバージョンを使用している可能性があるという私の主張を検証します。
私の Heroku インスタンスでは、Procfile には間違いなく不変フラグも設定されていません。
~ $ lsattr Procfile
------------------- Procfile
更新 2
Play Framework 2 (Scala のみ) 用の MongoDB Salat プラグインを使用しています。
私が拾ったパターンは次のとおりです。
MongoDB サポートの実装を開始する前に、すべてのプッシュが成功しました。
次に、Salat プラグインを統合し、MongoLabs アカウントにサインアップして、楽しみが始まりました。上記のプラグインはcom.mongodb.MongoURIをサポートしておらず、構成を解析する方法が原因で、 を指定すると爆発します-Dmongodb.uri
。「デフォルト」のようなキースペースが必要です。
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
ところで、ローカルで動作します。
最初から物事を明確にすることができたときに、 Typesafe の Configによってスローされたエラーを飲み込んでしまう可能性があるため、Heroku サポートに注意を促しました。
また、2 回目のプッシュが成功するのを許可せずに、古い Procfile を使用するように依頼しました。非常に誤解を招く。
言うまでもなく、私は現在 Salat プラグインの MongoURI サポートも実装しています。
更新 3
mongodb.default.uri
Playでのサポートを実装しました!Salat プラグイン (および lib/ を使用してデプロイ) を使用しますが、Procfile で mongo 関連のものをプッシュするたびに、Heroku は依然としてエラーをスローします。
Heroku のサポートに同じ質問をしたところ、おそらく誰かが答えてくれるでしょう。Heroku は Procfile で使用できる変数を制限していますか?