2016-03-06 166 views
3

我正在尝试将我的Pl​​ay应用程序部署到Heroku。部署到Heroku时失败

可惜的是,我得到这个问题:

2016-03-06T14:19:45.939373+00:00 heroku[web.1]: State changed from starting to crashed 
2016-03-06T14:19:45.918504+00:00 heroku[web.1]: Process exited with status 255 
2016-03-06T14:49:45.477844+00:00 heroku[web.1]: State changed from crashed to starting 
2016-03-06T14:49:49.783812+00:00 heroku[web.1]: Starting process with command `target/universal/stage/bin/todolistscala -Dhttp.port=12681` 
2016-03-06T14:49:51.431641+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them. 
2016-03-06T14:49:51.599056+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx350m -Xss512k -Dfile.encoding=UTF-8 
2016-03-06T14:49:54.014919+00:00 app[web.1]: [[37minfo[0m] application - Creating Pool for datasource 'default' 
2016-03-06T14:49:54.492047+00:00 app[web.1]: [[37minfo[0m] p.a.d.DefaultDBApi - Database [default] connected at jdbc:h2:mem:play 
2016-03-06T14:49:57.727928+00:00 app[web.1]: [[33mwarn[0m] application - application.conf @ file:/app/target/universal/stage/conf/application.conf: 348: applyEvolutions.default is deprecated, use play.evolutions.db.default.autoApply instead 
2016-03-06T14:49:58.246865+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.247105+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.258404+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.258431+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.258933+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.259062+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.293455+00:00 app[web.1]: [[37minfo[0m] application - ApplicationTimer demo: Starting application at 2016-03-06T14:49:58.259Z. 
2016-03-06T14:49:58.294643+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.294826+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.297164+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.297222+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.297271+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. 
2016-03-06T14:49:58.297976+00:00 app[web.1]: [[31merror[0m] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret 
2016-03-06T14:49:58.303328+00:00 app[web.1]: Oops, cannot start the server. 
2016-03-06T14:49:58.305408+00:00 app[web.1]: @6pba2k59a: Configuration error 
2016-03-06T14:49:58.305742+00:00 app[web.1]: at play.api.libs.crypto.CryptoConfigParser.get$lzycompute(Crypto.scala:498) 
2016-03-06T14:49:58.305830+00:00 app[web.1]: at play.api.libs.crypto.CryptoConfigParser.get(Crypto.scala:465) 
2016-03-06T14:49:58.305890+00:00 app[web.1]: at play.api.libs.crypto.CryptoConfigParser.get(Crypto.scala:463) 
2016-03-06T14:49:58.305953+00:00 app[web.1]: at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) 
2016-03-06T14:49:58.306059+00:00 app[web.1]: at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72) 

由于没有涉及Application Secret一个错误,我这样说的:https://www.playframework.com/documentation/2.5.x/ApplicationSecret。但是,我不明白如何将密钥发送到服务器环境而不在本地计算机上。

但无论如何,我不确定没有Application Secret是问题的真正原因,因为服务器无法启动(即使我没有Application Secret,我也会认为服务器可以启动) 。

这种故障的原因是什么?

+0

“application.conf”的内容是什么? – codefinger

回答

3

您应该将应用程序密钥设置为Heroku上的环境变量。这样,它只能在应用程序环境中使用,并且如果需要,可以轻松更改而无需重新部署。

您可以将标记添加到您的Procfile

web: target/universal/stage/bin/todolistscala \ 
-Dhttp.port=12681 \ 
-Dplay.crypto.secret=${APPLICATION_SECRET} 

以上是一个更好的可视化,但Procfile不会与每个进程多个行工作。它应该是这样的:

web: target/universal/stage/bin/todolistscala -Dhttp.port=12681 -Dplay.crypto.secret=${APPLICATION_SECRET} 

然后你设置环境变量APPLICATION_SECRET。您可以从Heroku的Web界面做这一点,或使用Heroku的工具区:

heroku config:set APPLICATION_SECRET="thisisthesecretpleasechangeit" -a your-app-name 

一般来说,所有的重要凭据(数据库,缓存服务器,API密钥)应当被存储的应用环境中的这种方式。

+0

我创建了'Procfile',设置了环境变量并提交了'Procfile'。但是,当我推送时,我仍然遇到同样的错误。 – octavian

+0

你真的使用Play 2.5或2.4吗? 2.3或更早版本使用'application.secret'而不是'play.crypto.secret'。 –

+1

现在我想起来了,'Procfile'烦人的必须是一行,所以如果你复制/粘贴了我的东西,它会忽略其他行。 –