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表了。

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

时间: 2024-11-01 14:39:12

Rails 连接多个数据库的两种方式的相关文章

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

Android开发之使用sqlite3工具操作数据库的两种方式

使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/fengyuzhengfan/article/details/40193123 在Android SDK的tools目录下提供了一"sqlite3.exe工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询. 管理数据库. 下面介绍两种方式: 第

21_django配置使用mysql数据库的两种方式

目录 配置django项目使用mysql数据库的两种方式 1. 直接在settings.py 文件中添加数据库配置信息 2. 将数据库配置信息存到一个文件中,在settings.py文件中将其引入.(推荐) 安装mysql驱动 1. 使用mysqlclient *推荐 2. 使用pymysql django2.2以上版本默认不支持使用了 配置django项目使用mysql数据库的两种方式 1. 直接在settings.py 文件中添加数据库配置信息 # 配置数据库的第一种方式 DATABASES

C# 连接SQL Server数据库的几种方式--server+data source等方式

本文转载自忙碌的布谷鸟  如何使用Connection对象连接数据库? 对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法. Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection. SqlConnection类的对象连接SQL Server数据库:OracleConnectio

springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Upload to

不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

.NET访问数据库的两种方式(C#语言)

一.直接使用C#操作数据库的类库ADO.NETADO.NET使用Connection对象来连接数据库,使用Command或DataAdapter 对象来执行SQL语句,并将执行的结果返回给DataReader或DataAdapter,然后 再使用取得的DataReader或者DataAdapter对象操作数据结果. 二.Entity Framework Entity Framework 实体框架是微软的一个ORM框架.是支持面向数据的软件开 发应用程序.我们一般配合linq和lambda表达式使

连接SQL Server 数据库的三种方式

涉及到配置文件的连接方法: 方式一: 在配置文件中: <configuration> <appSettings> <add key="ConnectionString" value="Data Source=服务器的名称;Initial Catalog=要连接的数据库的名称;User ID=数据库登录名;Password=数据库登录密 码"/> </appSettings> <configuration>

scrapy数据存储在mysql数据库的两种方式

方法一:同步操作 1.pipelines.py文件(处理数据的python文件) import pymysql class LvyouPipeline(object): def __init__(self): # connection database self.connect = pymysql.connect(host='XXX', user='root', passwd='XXX', db='scrapy_test') # 后面三个依次是数据库连接名.数据库密码.数据库名称 # get c