在Heroku上维护Seperate Dev / Prod Config文件不起作用

时间:2013-02-03 14:51:24

标签: heroku playframework-2.0

背景故事

从一个小小的谷歌搜索,我猜测,每次部署到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。

我的问题是:

  1. 这是维护prod / dev环境的正确方法吗
  2. 为什么端口没有被PORT env变量
  3. 读出
  4. 以前,当我刚刚开始Play时:D,
  5. 我的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文件覆盖不起作用?

3 个答案:

答案 0 :(得分:4)

中更改Proc文件
  

web:target / start $ {JAVA_OPTS} -Dconfig.resource = prod.conf

答案 1 :(得分:1)

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

请参阅以下指南:

答案 2 :(得分:0)

我总是使用逆序而且有效:

  • 在'main'application.conf中没有设置db.default.urluserpassword,因为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将能够使用自己的设置运行应用程序,而无需选择任何其他配置。