我正在部署用Play编写的应用程序!框架1.2.3到heroku(雪松堆栈),我通过设置一些环境变量

heroku config:add DB_NAME="FOO"


将它们设置为OK(通过heroku config --app appname看到)。这些都是通过手动调用System.getenv()从代码中读取的,也可以通过在读取application.conf时通过play进行的替换来读取。

morphia.db.name=${DB_NAME}


机制。这种策略在本地效果很好,但是在heroku上似乎无法读取环境变量,并且由于无法替换变量,因此将其推送到heroku失败。游戏发出的警告是:

WARNING: Cannot replace DB_NAME in configuration (morphia.db.name=${DB_NAME})


它之所以死亡,是因为它无法连接到数据库,这是一个致命错误。它还将尝试连接到$ {HOST}:$ {PORT}的错误报告为错误,因此此处未执行任何替换。我在这里错过了什么吗,或者这根本不适用于Play!目前在heroku上的应用程序?应该怎么做?

最佳答案

推送到Heroku会启动Play应用程序的预编译,然后依次读取您的application.conf文件。不幸的是,Heroku配置变量在构建时不可用,因此您将看到提到的警告:

WARNING: Cannot replace VALUE in configuration (key=${VALUE})


但是,这不应导致推送失败。也不会导致您的应用无法运行。在运行时,Play将重新读取application.conf,配置变量将出现并且其值将被替换。

在这种情况下,很难确切地说出问题所在。您可以尝试做的一件事就是像Heroku一样运行Play命令,然后看看您得到了什么:

$ play precompile
$ play run --http.port=5000 --%prod -Dprecompiled=true


请注意,单独的预编译步骤和prod框架ID不同于如果您仅在本地运行应用程序,则如下所示:

$ play run


您还可以使用Heroku记录票证,然后有人可以查看您的应用程序。

至少,我们需要摆脱那些警告消息,因为您不是第一个注意到这一点的人。

07-25 22:14
查看更多