【发布时间】:2012-04-27 20:47:21
【问题描述】:
我应该将特定于我的开发、测试、生产服务器的密钥存储在我的 ruby 项目中的什么位置?例如,应该在哪里存储我的开发特定的 amazon s3 密钥和密钥?我的 config/development.rb 文件?我看到的一个问题是,如果该文件是公共 github 项目的一部分,它将向所有人展示。 谢谢!
【问题讨论】:
标签: ruby-on-rails
我应该将特定于我的开发、测试、生产服务器的密钥存储在我的 ruby 项目中的什么位置?例如,应该在哪里存储我的开发特定的 amazon 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:
...
【讨论】:
您可以将这些信息放在 config 目录中的 .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
完成后,您必须通过执行以下操作将这些键存储在哈希中:
APIS_CONFIG = {'amazons3' => YAML.load_file("#{RAILS_ROOT}/config/amazons3.yml")[Rails.env]}
(您可以将上一行代码放在位于config/initializers 目录下的.rb 文件中)
请注意,您可能会觉得这个Railscast 很有趣。
【讨论】: