这是一个很难搜索的人。如果我有一个开源的rails web应用程序项目,其源代码是公共托管的,就像在GitHub上一样,如果该应用程序要在公共网站的生产中运行,那么应该隐藏或交换哪些信息?我的假设是,config / initilizers / secret_token.rb,任何认证腌制内容和数据库登录信息等内容在生产中不应与开发中的相同。应该采取哪些其他预防措施来确保生产场地不易受到摆弄会议或其他我不考虑的其他人的影响?
答案 0 :(得分:13)
特定于Rails的敏感信息来源
清除敏感信息:
config/environments/*.rb
config/initializers/cookie_verification_secret.rb
config/initializers/secret_token.rb
config/initializers/session_store.rb
config/memcached.yml
config/database.yml
db/seeds.rb
lib/tasks
中的任何佣金任务。test/fixtures/*
常规更改
包括这一点只是因为我认为这是一个很好的清单,要记住发布你在生产中也有的开源软件。
答案 1 :(得分:1)
Shaun之前的回答是非常彻底的。
此外,我还建议您使用.gitignore,以避免提交包含敏感信息的文件。
任何包含API密钥或密码等的文件都应该在.gitignore中。通常,这包括:
database.yml
log/*
tmp/*
如果您将API密钥分配给代码文件中的常量,我建议将所有API密钥,密码等放入site.yml文件中。然后将此文件添加到.gitignore并添加初始化程序以将此文件解析为常量。使用该常量来访问秘密数据。
例如:
配置/ site.yml:
hoptoad_api_key: ABCDEF1234567890
配置/初始化/ 01_site.rb
SITE = HashWithIndifferentAccess.new(YAML.load(File.open(File.join(Rails.root, 'config', 'site.yml'))))
配置/初始化/ hoptoad.rb
HoptoadNotifier.configure do |config|
config.api_key = SITE['hoptoad_api_key']
end
请注意,初始值设定项按字母顺序运行。如果在其他初始值设定项中需要SITE
常量,请务必将读取配置的文件命名为前导号,以便首先运行它。
为了对开源项目更加用户友好,您应该在自述文件中包含一个带有示例的database.yml.sample和site.yml.sample文件和/或解释所需的配置。