配置错误[未设置应用程序机密]

Configuration error[Application secret not set]

我遇到这个错误运行在生产模式下运行 2.4 服务器:

play.api.UnexpectedException: Unexpected exception[ProvisionException: Unable to provision, see the following errors:

1) Error in custom provider, @6mh5cjo5l: Configuration error
  while locating play.api.libs.CryptoConfigParser
  while locating play.api.libs.CryptoConfig

...

Caused by: play.api.PlayException: Configuration error[Application secret not set]

如何修复?

默认播放模板使用以下内容:

play.crypto.secret="changeme"

application.conf 中需要更改以用于生产。 Play 提供了一个实用程序来为您生成随机秘密:

./activator playGenerateSecret

然后您可以将其填充为环境变量:

APPLICATION_SECRET=...

并在 conf/application.conf 中确保以下内容:

play.crypto.secret="changeme"
play.crypto.secret=${?APPLICATION_SECRET}

正如 Play documentation 解释的那样:

The second line in that configuration sets the secret to come from an environment variable called APPLICATION_SECRET if such an environment variable is set, otherwise, it leaves the secret unchanged from the previous line.

然后错误就会消失。

对于仍然会偶然发现这个问题并且还没有像我一样使用 activator sbt 的任何人。

只需按照播放 2.x 页面上的文档 (Play 2.4 example)

"magic"命令是

sbt playUpdateSecret

这将生成密钥并更新您的 conf 文件。所以这个命令为我节省了很多工作和发现。

干杯。