如何配置Rails各环境指向database.yml中自定义命名的数据库配置
问题原因
Rails 5.2的ActiveRecord默认启动逻辑为读取config/database.yml,查找与当前Rails.env值同名的顶级配置节点建立数据库连接。当前配置文件仅包含defaults、main两个顶级节点,无development、test、production同名配置项,因此抛出AdapterNotSpecified错误,该问题与dotenv-rails加载逻辑无关。
解决方案
通过YAML锚点复用main节点配置,补充三个环境对应的顶级配置项即可,无需重复编写配置,也无需修改框架默认逻辑。
修改后的config/database.yml完整内容如下:
defaults: &defaults adapter: postgresql encoding: utf8 port: 5432 timeout: 10000 main: &main <<: *defaults url: <%= ENV['MAIN_DATABASE_URL'] %> pool: <%= ENV['MAIN_DATABASE_POOL'] %> development: <<: *main test: <<: *main production: <<: *main
配置说明
- 三个环境的数据库配置100%复用
main节点所有参数,后续调整main节点配置会自动同步到三个运行环境,完全实现development/test/production -> main的映射关系 - 原有dotenv-rails加载逻辑无需调整:development、test环境下dotenv会在数据库配置加载前完成
.env文件的环境变量注入,可正常读取MAIN_DATABASE_URL、MAIN_DATABASE_POOL参数 - production环境下提前注入对应ENV变量即可正常读取配置,无需额外适配
- 该写法兼容所有Rails 5.x版本,无框架升级兼容隐患
内容的提问来源于stack exchange,提问作者VanillaDonuts
相关产品推荐
相关产品推荐

