【问题标题】:Change connection name for multiple databases更改多个数据库的连接名称
【发布时间】:2015-09-26 17:11:27
【问题描述】:

我正在为我的 rails 应用程序使用两个不同的数据库。通过将下面的行添加到 user.rb 中,我将我的用户模型连接到第二个数据库

establish_connection "db2_#{Rails.env}"

我正在使用 multi-database-migrations 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。

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多