我有一个小型的Sinatra应用程序,我在Heroku上运行,它使用一个管理员密码,以及一些API身份验证密钥。
哪里是存放这些东西的最佳地点?我是否将它们放在环境变量中,然后使用
heroku config:add ADMIN_PASSWORD=foobar
?或者我使用包含它们的配置文件,我只是不提交配置文件?
答案 0 :(得分:12)
我在配置yaml中粘贴了API密钥和类似的东西,就像这样
development:
twitter_api_key: stringstringstring
chunky: bacon
production:
twitter_api_key: gnirtsgnirtsgnirts
foo: bar
然后使用Sinatra的内置 set 来处理数据。
configure do
yaml = YAML.load_file(settings.config + "/config.yaml")[settings.environment.to_s]
yaml.each_pair do |key, value|
set(key.to_sym, value)
end
end
然后我可以从设置对象访问它们。不过,我不知道你为什么不提交配置文件。 。 。这里没有重大的安全风险,因为只有那些你明确定义的路径才能通过网络访问。如果您不想将管理员密码放在数据库中,我想管理密码可以以相同的方式存储,但我至少会用salt对其进行加密。
在定义自己的时候,小心不要踩到Sinatra的Configuration settings。
编辑:
我想我刚才意识到为什么你不想提交配置文件。如果您正在开发一个开源项目,您当然不希望将配置文件提交到您的开源代码库,但您需要将该文件提交给Heroku才能使其正常工作。如果是这种情况,我要么: