首页 > 解决方案 > 是否可以在 Rails 中创建多级环境定义?

问题描述

假设我有一个具有通常环境的应用程序:开发、登台和生产。然后假设我有一组任务需要在一个特定的配置选项集已被覆盖的环境中运行——比如数据库主机——并且这些脚本(及其覆盖)需要在每个环境中运行.

想到的一个解决方案是为这些特殊情况中的每一个创建一整套环境,即:dboverride-development.rbdboverride-stagingdboverride-production。这些环境中的每一个都将从其主环境继承,但随后会覆盖必要的配置选项。但这似乎很麻烦,并且不涉及大量的代码复制。

rails(特别是v4)中的这个用例是否有现有的策略或约定?

标签: ruby-on-rails-4configuration-files

解决方案


您可以使用环境变量来覆盖Rails 指南中显示的任何特定选项。

如果你有一个 config/database.yml 但没有 ENV['DATABASE_URL'] 那么这个文件将用于连接到你的数据库:

如果您同时设置了 config/database.yml 和 ENV['DATABASE_URL'] ,那么 Rails 会将配置合并在一起。为了更好地理解这一点,我们必须看一些例子。

当提供重复的连接信息时,环境变量将优先:


推荐阅读