2

我在以下位置阅读了解决方案:为我的 Rails 应用程序创建自定义配置选项的最佳方式?这似乎很有希望。即将开发和生产凭证存储在config/config.yml. 但后来我想。

如果我们有一个由开发人员和实习生组成的团队,他们将接触到包含所有生产凭证的文件。共识是相信你的团队。但诚实的人为错误确实会发生:电脑开机/解锁、木马、朋友使用电脑等。

我知道 Heroku 有一个叫做config vars + foreman的东西。但是,对于 AWS 之类的东西,它并不像创建新的访问密钥并将该访问密钥委托给特定的存储桶那么简单。它不是那样工作的。我能想到的唯一方法是仅出于开发目的创建一个新的 AWS 账户。如果我走这条路,我也必须为其他类似的第 3 方服务创建开发帐户。

有其他选择吗?

4

2 回答 2

1

我使用SettingsLogic

我为此创建了两个模型:Settings 和 PrivateSettings。我将设置分开:密码、令牌、api 密钥……在 PrivateSettings 中,其余在 Settings 中。

对于设置:

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

我将private_settings-sample.yml文件存储在 Git 中,以保持示例同步。生产数据显然没有填充。开发人员克隆存储库,并将其重命名private_settings.yml为能够工作。

config/private_settings.yml也是.gitignore为了避免错误地包含在内。

去生产,我使用 Capistrano 中的一个特定任务来创建一个符号链接,指向private_settings.yml存储在服务器中的正确文件(在,和config旁边的目录中):currentreleasesshared

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"
于 2012-06-08T08:03:30.810 回答
0

我不确定您是否可以阻止开发人员知道密码。即使您拥有为您提供正确凭据/密钥的完全独立的服务,开发人员也可以随时调试工作应用程序、添加记录密码的代码等。这些都是您必须信任的人。我认为可能的唯一方法是让管理员将所需的密钥放在类路径上并始终进行代码审查以防止在运行时读取凭据的所有尝试

于 2012-06-08T15:19:10.017 回答