在Heroku上玩2.2应用程序崩溃

时间:2013-10-15 21:02:53

标签: heroku playframework-2.2

从Play 2.0.4迁移到Play 2.2.0后,在Heroku上部署时出现此错误:

Oct 15 13:23:12 heroku/web.1: Starting process with command `target/universal/stage/bin/demagog -Dhttp.port=${PORT} ${JAVA_OPTS} -Dconfig.resource=${DEMAGOG_ENVIRONMENT}.conf`
Oct 15 13:23:13 app/web.1: Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -Djava.rmi.server.useCodebaseOnly=true
Oct 15 13:23:13 app/web.1: Bad application path: -Xmx384m
Oct 15 13:23:15 heroku/web.1: State changed from starting to crashed
Oct 15 13:23:15 heroku/web.1: Process exited with status 0
Oct 15 13:24:37 heroku/web.1: Starting process with command `target/universal/stage/bin/demagog -Dhttp.port=${PORT} -Dconfig.resource=${DEMAGOG_ENVIRONMENT}.conf`
Oct 15 13:24:37 app/web.1: Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -Djava.rmi.server.useCodebaseOnly=true
Oct 15 13:24:37 app/web.1: Play server process ID is 2
Oct 15 13:24:37 app/web.1: Oops, cannot start the server.
Oct 15 13:24:37 app/web.1: java.lang.IllegalStateException: System property demagog.defaultUser must be set. 

我不明白这个消息

Bad application path: -Xmx384m

我可以看到的第二个问题是我的Play应用程序找不到系统属性'demagog.defaultUser',但是此属性是在JAVA_OPTS环境变量中设置的。所以它应该工作。也许这只是上述问题的结果?任何提示?


已更新

我已经从@jan建议的Procfile中删除了$ {JAVA_OPTS}。第一个错误

Bad application path: -Xmx384m

不再在这里了,但系统属性'demagog.defaultUser'仍未设置。

Oct 16 10:50:35 heroku/web.1: Starting process with command `target/universal/stage/bin/demagog -Dhttp.port=${PORT} -Dconfig.resource=${DEMAGOG_ENVIRONMENT}.conf`
Oct 16 10:50:35 app/web.1: Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -Djava.rmi.server.useCodebaseOnly=true
Oct 16 10:50:35 app/web.1: Play server process ID is 2
Oct 16 10:50:35 app/web.1: Oops, cannot start the server.
Oct 16 10:50:35 app/web.1: java.lang.IllegalStateException: System property demagog.defaultUser must be set.
...
Oct 16 10:50:35 app/web.1: at play.api.Play$.start(Play.scala:87)
Oct 16 10:50:35 app/web.1: at play.core.StaticApplication.<init>(ApplicationProvider.scala:52)
Oct 16 10:50:35 app/web.1: at play.core.server.NettyServer$.createServer(NettyServer.scala:243)
Oct 16 10:50:35 app/web.1: at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:279)
Oct 16 10:50:35 app/web.1: at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:274)
Oct 16 10:50:35 app/web.1: at scala.Option.map(Option.scala:145)
Oct 16 10:50:35 app/web.1: at play.core.server.NettyServer$.main(NettyServer.scala:274)
Oct 16 10:50:35 app/web.1: at play.core.server.NettyServer.main(NettyServer.scala)
Oct 16 10:50:35 heroku/web.1: Process exited with status 255 

当我运行heroku命令时

heroku config

我可以看到系统属性包含在JAVA_OPTS环境变量

JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -Ddemagog.defaultUser=xxx ...

3 个答案:

答案 0 :(得分:11)

您可能尚未从Procfile中删除$ {JAVA_OPTS}。使用Play 2.2,JAVA_OPTS包含在生成的启动脚本中,因此您不必再将它们包含在Procfile中。

然后,启动脚本会尝试将您的JAVA_OPTS解释为app参数。

答案 1 :(得分:9)

好的,我终于找到了它。使用环境变量JAVA_OPTS设置系统属性的问题是:

  

环境变量在Unix中区分大小写,而在Windows中不区分大小写。

结合使用sbt-native-packager生成的脚本读取java_opts环境变量。所以你必须在Heroku中设置java_opts(小写)环境变量。

答案 2 :(得分:0)

回答更新: 我不知道现在究竟是什么问题。我建议通过application.config设置默认用户。不管怎么说,这样会更好玩。

你的application.conf中的

可以看看

demagog.defaultUser="SOME_STD_DEFAULT_USER"
demagog.defaultUser=${?DEMAGOG_DEFAULTUSER}

然后您可以通过类似

的设置来设置系统特定变量
heroku config:add DEMAGOG_DEFAULTUSER="yourdefaultuser"
相关问题