服务器环境变量应该存储在Ruby on Rails中?
问题描述:
我应该在我的ruby项目中存储特定于我的开发,测试和生产服务器的密钥?例如,哪里应该存储我的开发特定的亚马逊s3秘密和密钥?我的config/development.rb文件?我看到的一个问题是,如果该文件是公开的github项目的一部分,它将显示给大家。 谢谢!服务器环境变量应该存储在Ruby on Rails中?
答
您分别存储在config/development.rb
,config/testing.rb
和config/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
文件。否则,他们仍会上传到您的公开回购。
答
如果您查看config目录,您将看到一个包含数据库凭证信息的YAML文件。你可以为你的云环境做同样的事情。
development:
server: xiy-234
username: hello
password: 1325abc
production:
...
答
您可以将这些信息放在配置目录中的.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有趣。