2012-04-27 143 views
1

我應該在我的ruby項目中存儲特定於我的開發,測試和生產服務器的密鑰?例如,哪裏應該存儲我的開發特定的亞馬遜s3祕密和密鑰?我的config/development.rb文件?我看到的一個問題是,如果該文件是公開的github項目的一部分,它將顯示給大家。 謝謝!服務器環境變量應該存儲在Ruby on Rails中?

回答

3

您分別存儲在config/development.rbconfig/testing.rbconfig/production.rb單獨的環境變量。

但是,如果您的文件將存儲在公共git倉庫中,則您不希望將任何敏感信息硬編碼到它們中。最好的方法是使用屬於.gitignore的yaml文件或在shell中使用環境變量。我更喜歡後者,如下所示:

PAPERCLIP_OPTIONS = { storage:   :s3, 
         bucket:   ENV['S3_BUCKET'], 
         s3_credentials: { access_key_id: ENV['S3_KEY'], 
             secret_access_key: ENV['S3_SECRET'] }} 

然後,您只需在運行該應用程序的系統上設置環境變量。

如果您使用yaml配置文件方法,必須將敏感配置文件添加到您的.gitignore文件。否則,他們仍會上傳到您的公開回購。

1

如果您查看config目錄,您將看到一個包含數據庫憑證信息的YAML文件。你可以爲你的雲環境做同樣的事情。

development: 
    server: xiy-234 
    username: hello 
    password: 1325abc 

production: 
    ... 
0

您可以將這些信息放在配置目錄中的.yml文件中。

例如:

production: 
    access_key_id: xxx 
    secret_access_key: xx 
    bucket: xxx 

development: 
    access_key_id: xxx 
    secret_access_key: xxx 
    bucket: xxx 

staging: 
    access_key_id: xxx 
    secret_access_key: xxx 
    bucket: xxx 

一旦做到這一點,你必須在做這些密鑰存儲在一個Hash如下:

APIS_CONFIG = {'amazons3' => YAML.load_file("#{RAILS_ROOT}/config/amazons3.yml")[Rails.env]} 

(你可以把以前的代碼行內一個.rb文件位於config/initializers目錄中)

請注意,您可能會發現這個Railscast有趣。