ruby-on-rails-4 - 开发和生产配置各种环境的痛苦(Rails 4应用)

标签 ruby-on-rails-4 configuration environment-variables conventions

根据最佳实践,出于安全原因,我的开发团队不会将应用程序配置文件存储在存储库中(我们使用 config/application.yml 文件来存储配置)。但是,在我们实际开发部署的时候,这会带来一些问题:

  1. 开发人员需要添加一个新的外部 URL,该 URL 根据应用程序的运行环境而有所不同。由于 repo 中没有配置文件,他无法更新另一个开发人员同步的单个文件拉代码。为了实现这一点,他更新了他的本地 config/application.yml 文件,然后每个其他开发人员更新他们的本地文件,然后我们必须将新的 ENV 变量添加到服务器的 config/应用程序.yml。必须是更好的解决方案。

  2. 如果我们将 config/application.yml 文件存储在 repo 中并在每个人和服务器之间共享,这解决了共享/更新全局配置的问题,但它打开了开发人员可能会意外地在生产模式下启动他们的本地应用程序并触及实时数据或使用测试电子邮件向真实用户发送垃圾邮件(已经发生,这就是为什么要担心)。

是否有解决这些类型问题的标准最佳实践?看来我要么为了安全而牺牲生产力,但实际上不能两者兼得。

我一直在考虑在所有开发人员共享的存储库中创建一个 config/development.yml 文件,它存储除生产环境之外的所有环境。这样他们就可以共享用于开发的配置/环境项目并同步它们。但在生产中,我会有一个仅存在于服务器上的 config/production.yml 文件。

如果应用程序在除生产环境之外的任何环境中启动,它会加载 development.yml 文件。如果它在生产中启动,它会加载 production.yml 文件。但是由于 production.yml 文件不在 repo 中(仅在服务器上),开发人员不可能不小心接触实时数据或向真实用户发送垃圾邮件等...

有没有专业的开发人员尝试过这样的方案?我进行了大量谷歌搜索,但确实没有找到令人满意的解决方案。

最佳答案

查看 RailsConfig 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,这样它就不会被检入源代码管理。

关于ruby-on-rails-4 - 开发和生产配置各种环境的痛苦(Rails 4应用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25893907/

相关文章:

reactjs - 在 Nextjs 应用程序中使用 Cloud Run 环境变量

c - 如何用C在Windows中分别获取用户和系统环境变量

c# - 处理生产配置中的密码以进行自动化部署

windows - 你在哪里存储你的setting.xml?

node.js - 如何将环境变量添加到 AWS 放大?

ruby-on-rails - 参数缺失或值为空

ruby-on-rails - Has_many 上的 Rails Enum 问题,通过...无法从我的 Controller 调用方法

ruby-on-rails - 如何在每次部署时将文本文件的内容缓存到模型中一次?

ruby-on-rails - AngularJs 登录用户权限

php - 如何在 Nginx 配置文件中配置 Phalcon