2011-03-01 49 views
7

我在Heroku上运行的小型Sinatra应用程序使用单个管理员密码以及一对API认证密钥。在哪里存储管理员密码在sinatra + heroku应用程序?

哪里是存放这些东西的最佳地点?我是否将它们置于环境变量中,并使用

heroku config:add ADMIN_PASSWORD=foobar 

?或者我使用包含它们的配置文件,而且我根本不提交配置文件?

回答

12

我坚持API密钥,并在配置YAML之类的事情,像这样

development: 
    twitter_api_key: stringstringstring 
    chunky: bacon 
production: 
    twitter_api_key: gnirtsgnirtsgnirts 
    foo: bar 

然后使用Sinatra的内置设置来处理数据。

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才能运行。如果是这种情况,我会:

  • 使用两个单独的本地回购:一个用于开源项目,另一个用于heroku项目。只需在Heroku项目中将开源项目设置为上游存储库,即可获取更改。
  • 将API密钥和加密/腌制的密码放在数据库中; MongoHQ使用MongoDB作为简单nosql存储的插件,向Heroku用户提供免费套餐。