1

背景故事

通过一点谷歌搜索,我推测部署到 prod 而无需每次手动更改 conf 文件的最佳方法是维护单独的 conf 文件并覆盖 procfile 中的 conf-file-to-use

我的方法

我创建了两个conf文件

application.conf -- http://pastebin.com/BaaBuRHR

产品配置文件

  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 环境。

我的问题是:

  1. 这是维护生产/开发环境的正确方法吗
  2. 为什么端口未从 PORT env 变量中读取
  3. 以前,当我刚开始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而不是proc文件的数据库url。这是否意味着proc文件覆盖不起作用?

4

3 回答 3

4

更改您的 Proc 文件

网络:目标/开始 ${JAVA_OPTS} -Dconfig.resource=prod.conf

于 2013-02-05T12:38:45.643 回答
1

理想情况下,您将拥有一个通用配置文件并使用配置变量来调整行为/设置。您可以使用工头和 '.env' 文件来配置本地环境变量,并使用 'heroku config:set ...' 进行生产

请参阅这些指南:

于 2013-02-03T16:22:05.527 回答
0

我总是使用相反的顺序并且有效:

  • 在'main'中application.conf不要设置db.default.url,就像 Heroku 一样。始终使用此文件将应用程序配置为生产模式。userpassword-Ddb.default.url=${DATABASE_URL}
  • 创建文件:conf/local_rustic_bit.conf在此处包含application.conf并放置本地数据库的覆盖设置、其他邮件设置、其他调试规则等...最好将其添加到.gitignore即:conf/local_*.conf
  • 在您的本地机器上创建run.shrun.bat在 Windows 中)文件,并在其中放置用于运行包含“本地”配置的播放的命令。当然,您可以/应该start.sh在生产模式下本地测试应用程序。

    #!/bin/bash
    play -Dconfig.file=/opt/conf/local_rustic.bit.conf "~run 9123"
    
  • 从现在开始,您可以使用所需的数据库设置(通过./run.sh)在本地运行您的应用程序,而对于生产,Heroku 将能够使用自己的设置运行应用程序,而无需选择任何其他配置。

于 2013-02-03T19:03:23.063 回答