Configuration Playframework 2-存储您的凭据
您在哪里存储您的凭据,如密钥、邮件密码、数据库密码 我在网上发了一个帖子 存储凭据的最佳方式似乎是在外部服务器上 但是play2使用application.conf来实现这一点Configuration Playframework 2-存储您的凭据,configuration,playframework-2.0,credentials,Configuration,Playframework 2.0,Credentials,您在哪里存储您的凭据,如密钥、邮件密码、数据库密码 我在网上发了一个帖子 存储凭据的最佳方式似乎是在外部服务器上 但是play2使用application.conf来实现这一点 那么,在play2中如何以及在何处存储凭据呢 更新1: 好的,我在用heroku 我将环境变量设置为: heroku config:add test=ITWORKS Logger.info(Play.application().configuration().getString("sometest")); 在ap
- 那么,在play2中如何以及在何处存储凭据呢
heroku config:add test=ITWORKS
Logger.info(Play.application().configuration().getString("sometest"));
在application.conf中,我添加了
sometest=${test}
我尝试这样访问它:
heroku config:add test=ITWORKS
Logger.info(Play.application().configuration().getString("sometest"));
但我得到了以下错误:
UnresolvedSubstitution: conf\application.conf: 54: Could not resolve substitution to a value: ${test}
我猜play2找不到变量测试,因为它在heroku上。但是我也在本地windows环境中添加了它->仍然是相同的错误
你知道怎么了吗
更新2:
好的,它可以工作,我只需要在添加一个env变量后重新启动
最后一个问题:
每次在本地机器上添加系统变量都有点烦人。是否有开发模式?
application.conf
支持环境变量,例如db.default.user=${db\u user}
。您可以将其作为控制台参数传递(这是不安全的,因为它出现在ps
中),或者更安全地将其设置为环境变量
在Heroku上,通过Heroku config
设置环境变量,例如Heroku config:add DB\u USER=MyDBAdmin
您可以通过
export DB\u USER=MyDBAdmin
在本地设置它们,或者将它们添加到您的~/.bash\u配置文件中(如果您使用bash)。广告。3:正在播放应用程序。conf
不能通过任何路由或其他类型的路径访问,因此不能将其视为“放置在webroot中”。Terry的建议在PHP中是正确的,但不适合使用(他警告说,他当然不知道框架)。他给出了一个PHP脚本示例,但相信我,访问http://somdomain.tld/config.php
和Play的conf/application.conf
很大。它们不能直接比较
在application.conf
中存储凭证是目前最安全(也是最快)的方法,我无法想象在浏览器中反编译文件的方法,即使解析器会死掉(这是不可能的,因为它不是PHP)。如果您决定将凭据存储在某个遥远的位置,您将面临新的风险,因为您需要额外检查客户端是否有权获取配置,应用程序启动所需的时间是否会增加等等
更新1:
使用环境变量不是一种安全的方式——正如马吕斯所指出的,它将出现在进程列表中,因此您将向每个管理员显示您的凭据,我很确定您不希望在ie中使用您的电子邮件
当然,在Heroku中,这是传递他们的DB连接URL的一种方式,但是其他凭证应该存储在配置文件中。最后请记住,将所有凭证放入其中会导致应用程序某天无法启动
本例中的解决方案是使用,场景非常简单
在application.conf
中,如果生产数据库很可能是Herokudb.default.user
和db.default.password
,则应保留一个指向该数据库的URL,因为公共Heroku URL中包含凭据
为您的本地版本创建一个文件,即:conf/local\u postgres.conf
include application.conf,并覆盖/添加所有必需的配置密钥,如本地postgres数据库中的凭据。此外,您还可以设置其他内容,更改日志记录级别,启用smtp.mock
,等等
使用此配置在本地运行您的应用程序(注意,我在-Dconfig.resource
方面遇到一些问题,因此我不得不使用-Dconfig.file
语法,您必须找到哪个方法在您的系统中运行良好)
提示:使用非默认端口是“演示”您正在使用本地配置的最简单方法。如果您忘记了您有备用配置,并将使用commonplay~run
命令启动您的应用程序,您的应用程序将位于http://localhost:9123
将不可用
创建一个bash脚本runlocal
(或者在Windows中创建runlocal.bat
文件),并从上一点开始将命令放在那里。在.gitignore
文件中忽略它
从现在起,您将使用第4点的脚本运行本地开发应用程序。当推到Heroku时,它将使用application.conf
中的值部署您的应用程序,因为您没有在Procfile中设置可选配置。更重要的是,通过一些其他组合,您可以使用Heroku的SQL在本地运行您的应用程序,以执行演进,而无需将其推到部署,或者检查最新的修复包。当然,您必须始终确保您是在本地版本的数据库上开发的,否则您可能会意外更改/破坏您的生活数据
更新2:
最后,使用*.conf
文件比将其存储在单独的类中要好,以防您必须更改不同位置的配置(如前所述,使用相同代码的团队、开发/生产环境等)
当然可以缩短为:
导入播放配置;
输入play.play;
// ...
Configuration cfg=Play.application().Configuration();
getString(“smtp.password”);
getBoolean(“smtp.mock”);
cfg.getInt(“smtp.port”);
我试图使用它,但遇到了一个错误->更新了我的第一篇博文非常感谢!只有一个问题,马吕斯建议我使用环境变量,但在我的本地机器上添加它们会有点烦人,因为否则它显然不起作用。最糟糕的是,每次添加新变量时,我都需要重新启动计算机。我的本地机器有解决办法吗