我在Best way to create custom config options for my Rails app?阅读了解决方案,这似乎很有希望。即在config/config.yml
中存储开发和生产凭证。但后来我想。
如果我们有一组开发人员和实习生,他们将使用所有生产凭据公开此文件。共识是信任你的团队。但诚实的人为错误确实发生了:计算机停止/解锁,特洛伊木马,使用计算机的朋友等等。
我知道Heroku有一个名为config vars + foreman的东西。但是,对于像AWS这样的东西,它并不像创建新的访问密钥和将访问密钥委托给特定的存储桶那么简单。它不像那样工作。我能想到的唯一方法是创建一个仅用于开发目的的新AWS账户。如果我走这条路,我也必须为其他类似的第三方服务创建开发帐户。
还有其他选择吗?
答案 0 :(得分:1)
我使用SettingsLogic。
我为此创建了两个模型:设置和私有设置。我将设置分开:密码,令牌,api密钥......在PrivateSettings中,其余设置在“设置”中。
对于设置:
class Settings < Settingslogic
source "#{Rails.root}/config/settings.yml"
namespace Rails.env
end
settings.yml
文件存储在Git中。
对于PrivateSettings:
class PrivateSettings < Settingslogic
source "#{Rails.root}/config/private_settings.yml"
namespace Rails.env
end
我在Git中存储了一个private_settings-sample.yml
文件,以保持示例同步。生产数据显然没有填充。一个dev克隆了repo,并将其重命名为private_settings.yml
以便能够工作。
config/private_settings.yml
也位于.gitignore
,以避免错误包含。
为了刺激,我使用Capistrano中的特定任务创建指向存储在服务器中的正确private_settings.yml
文件的符号链接(config
旁边的current
releases
{ {1}}和shared
):
namespace :deploy do
task :config_settings do
run "cd #{current_path}/config && ln -sf #{shared_path}/../config/private_settings.yml private_settings.yml"
end
end
after "deploy:update", "deploy:config_settings"
答案 1 :(得分:0)
我不确定您是否可以阻止开发人员知道密码。即使您已经完全分离了为您提供正确凭据/密钥的服务,开发人员也可以随时调试工作应用程序,添加记录密码等的代码,这些是您必须信任的人。我认为可能的唯一方法是让管理员在类路径上放置所需的密钥,并始终进行代码审查以防止在运行时读取凭据的所有尝试