Ruby on rails 4 在开发和生产中配置各种环境的痛苦(Rails 4应用程序)
根据最佳实践,出于安全原因,我的开发团队不在repo中存储应用程序配置文件(我们使用Ruby on rails 4 在开发和生产中配置各种环境的痛苦(Rails 4应用程序),ruby-on-rails-4,configuration,environment-variables,conventions,Ruby On Rails 4,Configuration,Environment Variables,Conventions,根据最佳实践,出于安全原因,我的开发团队不在repo中存储应用程序配置文件(我们使用config/application.yml文件存储配置)。然而,当我们实际开发和部署时,这会导致一些问题: 开发人员需要添加一个新的外部URL,该URL根据应用程序运行的环境而有所不同。因为repo中没有配置文件,所以当其他开发人员提取代码时,他无法更新同步的单个文件。为了实现这一点,他更新了他的本地config/application.yml文件,然后其他开发人员更新了他们的本地文件,然后我们必须将新的ENV
config/application.yml
文件存储配置)。然而,当我们实际开发和部署时,这会导致一些问题:
config/application.yml
文件,然后其他开发人员更新了他们的本地文件,然后我们必须将新的ENV变量添加到服务器的config/application.yml
。必须是一个更好的解决方案config/application.yml
文件存储在repo中,并在每个人和服务器之间共享,这就解决了共享/更新全局配置的问题,但这也增加了开发人员可能会在生产模式下意外启动本地应用程序,接触实时数据或用测试电子邮件向真实用户发送垃圾邮件的可能性(这种情况已经发生,这也是人们关注的原因)config/development.yml
文件,该文件存储除生产环境之外的所有环境。这样,他们就可以共享用于开发的配置/环境项并将其同步。但是在生产环境中,我会有一个config/production.yml
文件,它只存在于服务器上
如果应用程序是在生产环境以外的任何环境中启动的,它将加载development.yml
文件。如果在生产中启动,则加载production.yml
文件。但是由于production.yml
文件不存在于repo中(仅在服务器上),因此开发人员不可能意外地接触实时数据或向真实用户发送垃圾邮件等
有没有专业开发人员尝试过这样的方案?我在谷歌上搜索了很多次,但确实没有找到令人满意的解决方案。查看gem。这让你可以完全按照你所说的去做,但要像宝石一样容易。这还允许您和您的开发团队拥有覆盖设置的本地yaml文件
config/settings.yml
config/settings/#{environment}.yml
config/environments/#{environment}.yml
config/settings.local.yml
config/settings/#{environment}.local.yml
config/environments/#{environment}.local.yml
然后在.gitignore
中只包含config/settings/production.yml
,这样就不会将其签入源代码管理