【发布时间】:2015-11-01 23:30:05
【问题描述】:
我正在 heroku 上运行我的 Play 应用程序。在 heroku 上,想法是通过 env 变量设置各种设置。例如 AWS S3 秘密访问密钥及其 ID。这是可以理解的。因此,遵循良好做法,我将以下设置放入我的 conf/application.conf:
# AWS.
# ~~~~~
aws.accessKeyID = ${?AWS_ACCESS_KEY_ID}
aws.secretAccessKey = ${?AWS_SECRET_ACCESS_KEY}
好的,一切顺利。现在,每当我在 PROD 或 DEV 模式下运行时,我都可以更改它们,而不必担心对它们进行硬编码。问题是,当我运行 activator ~run 在本地开发我的应用程序时,这些设置没有被读取和设置。这就像 activator ~run 完全忽略了环境变量的替代选项。在加载我的索引页面时,我通过以下方式阅读和打印它们:
import play.api.Play.current
...
val v1 = current.configuration.getString("aws.accessKeyID")
val v2 = current.configuration.getString("aws.secretAccessKey")
println("v1=" + v1 + ", v2=" + v2)
让我更详细地说明正在发生的事情:
floyd@floyd-VirtualBox:~/myproj$ echo $AWS_ACCESS_KEY_ID
access-key-id
floyd@floyd-VirtualBox:~/myproj$ echo $AWS_SECRET_ACCESS_KEY
secret-access-key
floyd@floyd-VirtualBox:~/myproj$ activator ~run
[info] Loading project definition from /home/floyd/myproj/project
[info] Set current project to myproj (in build file:/home/floyd/myproj/)
--- (Running the application, auto-reloading is enabled) ---
[info] p.a.l.c.ActorSystemProvider - Starting application default Akka system: application
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
[info] Compiling 1 Scala source to /home/floyd/myproj/target/scala-2.11/classes...
[success] Compiled in 15s
[info] - play.api.libs.concurrent.ActorSystemProvider - Starting application default Akka system: application
[info] - application - ReactiveMongoApi starting...
[info] - application - ReactiveMongoApi successfully started with DB 'test'! Servers:
[localhost:27017]
[info] - play.api.Play - Application started (Dev)
v1=None, v2=None
两种情况都没有打印,我希望看到存储在 env 变量中的值。
感谢您的帮助!
【问题讨论】:
-
我已经在 2.4.x 上测试过了。按您的预期工作。你从哪里打电话给
println("v1=" + v1 + ", v2=" + v2)?你也可以试试'activator -D AWS_ACCESS_KEY_ID=access-key-id ~run -
我在我的 ApplicationController 的 getIndexPage 函数上调用它。问题是我不想使用 -D 因为AFAIK应该自动从环境中读取这些环境变量。我不想再次通过它们并在另一个地方提及它们。所以即使没有 -D 使用它也适用于你?嗯,今天晚些时候我会重新测试。你用什么激活器版本?谢谢。
-
我只是建议使用 -D 来尝试隔离问题。使用通过 git-bash 在 windows 上运行的激活器 1.3.5 和在 Mac 上运行 1.3.6 进行测试。我也在 Play 中使用了相同的技术! 2.3.x。仔细检查你可以打印一些其他不依赖于环境变量的自定义配置
-
对不起,我还是不行,我需要明确使用-D。我现在想出了一个解决方法,我在下面发布了答案。不过感谢您的帮助。顺便说一句,我的激活器版本是相同的!
标签: playframework typesafe-activator