2011-03-01 75 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用戶提供免費套餐。