2012-04-27 142 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有趣。