Java 播放框架部署失败:“;尚未设置应用程序机密,我们处于prod模式。您的应用程序不安全”;
我正在Heroku上部署一个使用Play框架开发的web应用程序。 部署无法返回此错误:Java 播放框架部署失败:“;尚未设置应用程序机密,我们处于prod模式。您的应用程序不安全”;,java,heroku,playframework,Java,Heroku,Playframework,我正在Heroku上部署一个使用Play框架开发的web应用程序。 部署无法返回此错误: [error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. “我们处于生产模式”是什么意思?在哪里设置模式?我必须改变这一点,因为这不是一个生产环境 谢谢把这个放到你的conf/applicati
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
“我们处于生产模式”是什么意思?在哪里设置模式?我必须改变这一点,因为这不是一个生产环境
谢谢把这个放到你的conf/application.conf中 播放2.5
play.crypto.secret="changethissosomethingsecret"
播放2.6+
play.http.secret.key="changethissosomethingsecret"
在生产模式下运行应用程序之前,需要生成应用程序机密
您需要在生产模式下使用activator PlayGenerateCret为应用程序生成令牌
您需要根据应用程序使用的播放版本设置不同的键 你用的是什么版本的剧本? 查看项目的
plugins.sbt
内的com.typesafe.play:sbt plugin
版本,或者如果您有与GNU兼容的shell,请执行以下命令:
find . -name "plugins.sbt" -exec grep -PHin --color=always 'com.typesafe.play.*sbt-plugin.*%\s*"\K.*?(?=")' {} \;
了解应用程序使用的play版本号后,继续下一步
基于播放版本的application.conf中使用的密钥是什么? :
application.secret
(默认为changeme
):
play.crypto.secret
(默认为changeme
):
play.crypto.secret
(默认为changeme
):
play.http.secret.key
(默认为changeme
)正如你所看到的,这是不一致的,但一致的是:
APPLICATION\u secret
环境变量/属性覆盖机密(因此,类似于APPLICATION\u secret=“changed”sbt“runProd 9001”
)changeme
接下来的两个选项在Play
v2.6.x
上进行了测试,但根据文档,应该使用与v2.4.x
和v2.5.x
相同的命令。
唯一的例外是v2.3.x
,它分别使用play generate secret
和play update secret
如何让sbt为我生成密钥?
从play应用程序的目录中运行以下命令(使用sbt v1.1.6和play v2.6.x测试):
您可以手动复制以上内容作为密钥的值(基于前面提到的play framework版本),也可以使用下面的建议
如何让sbt自动更新application.conf
中的现有密钥?
与上面相同,从play framework应用程序的根目录运行以下命令:
$ sbt playUpdateSecret | grep -i "secret"
[info] Generated new secret: Kz?fHm_I[wt^Onp[@cr<:`ttrQi]KMsdDs>22hEF?RhkoanQ7gA6NAjL33EV2^Xt
[info] Updating application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Did not find application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Adding application secret to start of file
如您所见,如果您使用
playdupdatesecret
生成一个新密码,那么它将无效,因为它被production.conf
中指定的密码覆盖 您需要在conf文件中添加应用程序机密
play.http.secret.key=“changethissosomthingsecret”
可能的重复即使这不是您的生产环境,您仍然希望在Heroku上以生产模式运行应用程序。请参阅此-现在已弃用。Play建议使用Play.http.secret.key=“changethissosomethingsecret”使用Play.http.secret.key=“changethissosomethingsecret”帮助。谢谢你的发帖。
$ sbt playUpdateSecret | grep -i "secret"
[info] Generated new secret: Kz?fHm_I[wt^Onp[@cr<:`ttrQi]KMsdDs>22hEF?RhkoanQ7gA6NAjL33EV2^Xt
[info] Updating application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Did not find application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Adding application secret to start of file
/path/to/yourapp/bin/yourapp -Dconfig.file=/path/to/production.conf