Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 在开发和生产中配置各种环境的痛苦(Rails 4应用程序)_Ruby On Rails 4_Configuration_Environment Variables_Conventions - Fatal编程技术网

Ruby on rails 4 在开发和生产中配置各种环境的痛苦(Rails 4应用程序)

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

根据最佳实践,出于安全原因,我的开发团队不在repo中存储应用程序配置文件(我们使用
config/application.yml
文件存储配置)。然而,当我们实际开发和部署时,这会导致一些问题:

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

  • 如果我们将
    config/application.yml
    文件存储在repo中,并在每个人和服务器之间共享,这就解决了共享/更新全局配置的问题,但这也增加了开发人员可能会在生产模式下意外启动本地应用程序,接触实时数据或用测试电子邮件向真实用户发送垃圾邮件的可能性(这种情况已经发生,这也是人们关注的原因)

  • 是否有解决此类问题的标准最佳实践?看起来我要么为了安全而牺牲生产力,但不能两者兼而有之

    我一直在考虑在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
    ,这样就不会将其签入源代码管理