裏話
少しグーグルから、毎回confファイルを手動で変更せずにprodにデプロイする最良の方法は、個別のconfファイルを維持し、procfileで使用するconf-fileをオーバーライドすることであると推測しました。
私のアプローチ
2つのconfファイルを作成しました
application.conf- http://pastebin.com/BaaBuRHR
prod.conf
include "application.conf"
http.port=${PORT}
applyEvolutions.default=true
db.default.driver=org.postgresql.Driver
db.default.url=${DATABASE_URL}
db.default.user=xxxxxxxxxxx
db.default.password=xxxxxxxxxxxxxxxxxxxxxxx
私のProcfileは次のようになります
web: target/start ${JAVA_OPTS} -Dconfig.file=/opt/conf/prod.conf
デプロイすると、ログに次のように表示されます
Feb 03 06:34:09 psytools heroku/web.1: Starting process with command `target/start ${JAVA_OPTS} -Dconfig.file=/conf/prod.conf`
Feb 03 06:34:10 psytools app/web.1: Play server process ID is 2
Feb 03 06:34:11 psytools app/web.1: [[37minfo[0m] application - Application has started
Feb 03 06:34:11 psytools app/web.1: [[37minfo[0m] play - Application started (Prod)
Feb 03 06:34:11 psytools app/web.1: [[37minfo[0m] play - Listening for HTTP on port 9000...
Feb 03 06:34:11 psytools heroku/web.1: Error R11 (Bad bind) -> Process bound to port 9000, should be 39098 (see environment variable PORT)
明らかに、herokuはPORT envを使用するのではなく、デフォルトのポート9000を使用しようとしています。
私の質問は:
- これは、prod/dev環境を維持するための正しい方法ですか
- ポートがPORTenv変数から読み取られないのはなぜですか
- 以前、私が
Play
:Dを始めたばかりのとき、
私のapplication.confには次の行がありました
db.default.url="jdbc:postgresql://ec2-54#####l0k8?ssl=true&sslfactory=org.postgresql.#ssl.NonValidatingFactory"
そして私のprocファイルは
web: target/start xxxxxx xxxxxxx xxxxxxx xxxxx -Ddb.default.url=${DATABASE_URL}
DATABASE_URLは、実際には単なる一部であることが判明しましたpostgresql://ec2-54#####l0k8
。しかし、これはまだ機能していました。つまり、herokuはprocファイルからではなくconfからデータベースURLを使用していました。これは、procファイルのオーバーライドが機能しないことを意味しますか?