从一个小小的谷歌搜索,我猜测,每次部署到prod而不对conf文件进行手动更改的最佳方法是维护单独的conf文件并覆盖proc文件中的conf-file-use-use
我创建了两个配置文件
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正在尝试使用默认端口9000而不是使用PORT env。
我的问题是:
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使用来自conf的数据库url而不是proc文件。这是否意味着proc文件覆盖不起作用?
答案 0 :(得分:4)
在
中更改Proc文件web:target / start $ {JAVA_OPTS} -Dconfig.resource = prod.conf
答案 1 :(得分:1)
理想情况下,您将拥有一个通用配置文件,并使用配置变量来调整行为/设置。您可以使用foreman和'.env'文件来配置本地环境变量,并使用'heroku config:set ...'进行生产
请参阅以下指南:
答案 2 :(得分:0)
我总是使用逆序而且有效:
application.conf
中没有设置db.default.url
,user
和password
,因为Heroku使用-Ddb.default.url=${DATABASE_URL}
进行设置。始终使用此文件配置生产模式的应用程序。conf/local_rustic_bit.conf
包含application.conf
并在其中放置本地数据库的覆盖设置,其他邮件程序设置,其他调试规则等...最好将其添加到.gitignore
即:conf/local_*.conf
在本地计算机上创建run.sh
(Windows中为run.bat
)文件,并在其中放置运行播放的命令,其中包含“本地”配置。当然,您可以/应该对start.sh
执行相同的操作,以便在生产模式下本地测试应用程序。
#!/bin/bash
play -Dconfig.file=/opt/conf/local_rustic.bit.conf "~run 9123"
从现在起,您可以使用所需的数据库设置(通过./run.sh
)在本地运行您的应用程序,而对于生产,Heroku将能够使用自己的设置运行应用程序,而无需选择任何其他配置。