• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Still_Walking

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Rails 连接多个数据库的两种方式

有些时候,我的项目可以需要连接多个数据库,这时应该怎么办?我查阅了资料,大部分都是说在model里加入establish_connection来指向不同的数据库,也有的说做个基础的类,每个model继承此类,这些说法都没有错,但不够精练,我在此做个总结。

这里使用的是mysql和rails4.2

一、每个model各自连接

修改database.yml如下:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: localhost
  username: username
  password: password
  database: databasename

development:
  <<: *default

test:
  <<: *default
  database: databasename_test

production:
  <<: *default
  database: databasename_production

others:
  development:
    adapter: mysql2
    encoding: utf8
    reconnect: true
    pool: 5
    host: localhost
    username: username
    password: password
    database: databasename2 
  production:
    adapter: mysql2
    encoding: utf8
    reconnect: true
    pool: 5
    host: localhost
    username: username
    password: password
    database: databasename2_production

创建一个module做数据库连接,如下

  module DatabaseConnection

    def self.included(base)
        base.establish_connection DatabaseCnf[:others][Rails.env]   #DatabaseCnf是一个类,它用来读取database.yml配置。
      end
  end

然后在每个需要这个连接的model里include这个module,就可以了,如:

  class Company < ActiveRecord::Base
    include DatabaseConnection
  end

这个Company类就可以连接到others下的数据库的companies表了,操作和默认相同。

二、创建一个连接类,需要的可以继承这个类

database.yml配置文件不变。

创建一个数据库连接类:

class DatabaseConnection < ActiveRecord::Base
  self.abstract_class = true    #共用连接池,减少数据库连接的消耗
  establish_connection DatabaseCnf[:others][Rails.env]  #DatabaseCnf是一个类,它用来读取database.yml配置。
end

然后需要这个连接的model继承这个类即可。

class Company < DatabaseConnection
end

这样的Company就是使用的others下的数据库的companies表了。

 

总结,我觉得使用第二种方式更好一些,它可以共享链接池,减少数据库连接,降低系统资源的消耗。

posted on 2016-10-08 15:38  limanxian  阅读(2209)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3