广告。3: In Playapplication.conf
无法通过任何route
或其他方式访问,path
因此不能视为“放置在 webroot 中”。Terry 的建议在 PHP 中是合适的,但不适合 Play(他警告说,他当然不了解框架)。他提供了一个 PHP 脚本示例,但相信我,访问http://somdomain.tld/config.php
和 Play之间的差异conf/application.conf
是巨大的。它们不能直接比较。
存储凭据application.conf
是目前最安全(也是最快)的方式,我无法想象有一种方法可以在浏览器中反编译文件,即使解析器会死(这是不可能的,因为它不是 PHP)。如果您决定将凭据存储在某个遥远的位置,您将面临新的风险,因为您需要额外检查客户端是否有权获取配置,应用程序启动所需的时间会增加等。
更新1:
使用环境变量不是一种安全的方式——正如 Marius 所指出的,它会出现在进程列表中,所以你会向每个管理员显示你的凭据,我很确定你不想用 ie 这样做。你的邮件。
当然,在 Heroku 中,这是一种传递数据库连接 URL的方法,但其他凭据应存储在配置文件中。最后请记住,Procfile 命令长度限制为255 个字符,因此将所有凭据放入其中会导致您的应用程序有一天无法启动。
这种情况下的解决方法是使用替代配置文件,场景非常简单
- 在您
application.conf
保留生产数据库的 URL 如果它最有可能是 Herokudb.default.user
并且db.default.password
应该注释为 common heroku URL 在其中包含凭据。
- 对于您的本地版本,创建一个文件,即:
conf/local_postgres.conf
在开头包含 application.conf 并将所有必需的配置密钥(如凭据)覆盖/添加到本地 Postgres DB。此外,您还可以设置其他内容、更改日志记录级别、启用smtp.mock
等。
使用此配置在本地运行您的应用程序。(注意,我遇到了一些问题,-Dconfig.resource
所以我不得不改用-Dconfig.file
语法,你必须找到哪种方法在你的系统中运行良好)即。
play -Dconfig.resource=local_postgres.conf "~run 9123"
提示:使用非默认端口是“证明”您正在使用本地配置的最简单方法。如果您忘记了您有替代配置并且将使用通用play ~run
命令启动您的应用程序,那么您所在位置的应用程序http://localhost:9123
将不可用。
创建一个 bash 脚本run-local
(或run-local.bat
Windows 中的文件)并将前一点的命令放在那里。.gitignore
在文件中忽略它。
从现在开始,您将使用第 4 点中的脚本运行应用程序以进行本地开发。在推送到 Heroku 时,它将使用来自的值部署您的应用程序,application.conf
因为您没有在 Procfile 中设置替代配置。更重要的是,您可以使用 Heroku 的 SQL 在本地运行您的应用程序以执行演进,而无需将其推送到部署,或检查最新的修复包。当然,您必须始终确保您在本地版本的数据库上进行开发,否则您可能会意外更改/破坏您的生活数据。
更新 2:
最后,使用*.conf
文件比将其存储在单独的类中要好,以防您必须更改不同位置的配置(如前所述,团队处理相同的代码、开发/生产环境等)
当然可以简写为:
import play.Configuration;
import play.Play;
// ...
Configuration cfg = Play.application().configuration();
cfg.getString("smtp.password");
cfg.getBoolean("smtp.mock");
cfg.getInt("smtp.port");