更改多个数据库的连接名称

时间:2015-07-08 16:37:43

标签: mysql ruby-on-rails ruby yaml database-migration

我正在为我的rails应用程序使用两个不同的数据库。我通过将以下行添加到user.rb

中将我的用户模型连接到第二个数据库

establish_connection "db2_#{Rails.env}"

我正在使用多数据库迁移gem https://github.com/azitabh/multi-database-migrations,当我运行

时它可以正常工作
rake db:multi:migrate DATABASE=db2

目前我的database.yml看起来像这样:

development:
  adapter: mysql2
  encoding: utf8
  database: database_name
  pool: 5
  username: root
  password:

db2_development:
  adapter: mysql2
  encoding: utf8
  database: database_name
  pool: 5
  username: root
  password:

但我希望它看起来像这样

db1_development:
  adapter: mysql2
  encoding: utf8
  database: database_name
  pool: 5
  username: root
  password:

db2_development:
  adapter: mysql2
  encoding: utf8
  database: database_name
  pool: 5
  username: root
  password:

我的问题是我应该在哪里告诉rails寻找“db1 _#{Rails.env}”?

我想在我的application.rb中添加类似的东西:

ENV['ENV'] ||= 'development'

db_conf = YAML::load(File.read("config/database.yml"))

DB1_CONF = db_conf["db1_#{Rails.env}"][ENV['ENV']]
DB2_CONF = db_conf["db2_#{Rails.env}"][ENV['ENV']]

但我不确定应该在哪里调用常量DB1_CONF。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

development是rails应用程序在本地启动时运行的环境,并且通过database.yml为此环境配置,因此您的模型将会退回"到development的默认数据库配置。如果您希望它们连接到db1_development,则必须明确告知模型,就像使用db2建立的连接一样。如果你不遵循惯例而不是配置,你必须明确。或者你可能会问自己为什么你不想首先坚持约定。