rails 关于连接多个数据库使用同一个database.yml文件的方法

本文介绍如何在Rails应用中使用同一个database.yml文件连接到多个数据库。首先展示了正常的database.yml文件内容,然后详细说明了配置多数据库的步骤,包括在model层的设置,如默认配置和通过继承实现不同数据库的连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接进入正题

1.首先正常database.yml文件如下所示

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: 5
  username: root
  password: 
  host: localhost
  port: 3306
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: hy

test:
  <<: *default
  database: hy_test

staging:
  <<: *default
  database: hy_pro
  pool: 25
  username: root
  password: 123456
  host: 192.168.1.1
  port: 3306

production:
  <<: *default
  database: hy_production
  pool: 25
  username: root
  password: 123456
  host: 192.168.1.1
  port: 3306

2.接下来是连接多个数据库的database.yml文件如下

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: 5
  username: root
  password: 
  host: localhost
  port: 3306
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: hy

test:
  <<: *default
  database: hy_test

staging:
  <<: *default
  database: hy_pro
  pool: 25
  username: root
  password: 123456
  host: 192.168.1.1
  port: 3306

production:
  <<: *default
  database: hy_production
  pool: 25
  username: root
  password: 123456
  host: 192.168.1.1
  port: 3306

hy_last:
  default: &default
    adapter: mysql2
    encoding: utf8mb4
    pool: 5
    username: root
    password: 
    host: localhost
    port: 3306
    socket: /tmp/mysql.sock

  development:
    <<: *default
    database: hy_last

  test:
    <<: *default
    database: hy_last_test

  staging:
    <<: *default
    database: hy_last_staging
    pool: 25
    username: root
    password: 123456
    host: 192.168.1.1
    port: 3306

  production:
    <<: *default
    database: hy_last_production
    pool: 25
    username: hy_last
    password: 123456
    host: 192.168.1.1
    port: 3306

3.接下来就是配置数据库的model层了
(1)首先默认情况下就是按默认的database.yml文件配置的
(2)连接第二个数据的配置是先建立一个父model文件,之后让别的model继承他即可
文件/app/models/hy_last_model.rb

class HyLastModel < ActiveRecord::Base
  begin
    config = ActiveRecord::Base.configurations["hy_last"][Rails.env] || Rails.application.config.database_configuration["hy_last"][Rails.env]
    ActiveRecord::Base.establish_connection(config)
  rescue Exception => e
    Rails.logger.error("Failed to connect to #{config["adapter"]} databaseName: #{config["database"]}")
    Rails.logger.error(e.message)
    Rails.logger.error(e.backtrace.join("\n"))
  end
end

4.让子类实现它/app/models/hy_test.rb

class HyTest < HyLastModel
  self.table_name = "tests"//指代数据库表名
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值