rails应用与多数据库的连接
rails与多数据库的连接有插件模式,也有原生模式,本文参考互联网资料,总结出来,并实际连接成功
1、配置database.yml
development:
adapter: mysql
encoding: utf8
database: myapp
username: root
password:
host: localhost
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: mysql
encoding: utf8
database: myapp
username: root
password:
host: localhost
typo:
adapter: mysql
database: typo
username: root
password:
host: localhost
说明:
1、typo是外部数据库,这是一个rails安装之后就存在的一个实例应用的库;
2、其他的development、test、production都是缺省的主数据库,这是缺省配置;
3、yml文件的书写方式非常严格,typo描述部分的下面各个参数必须采用tab的方式对齐,在netbeans中可以识别此格式,如果格式不对,将提示错误。
二、编写一个外部库的基础模型类
创建external_data.rb这个模型类
class ExternalData < ActiveRecord::Base
self.abstract_class = true
establish_connection :typo
end
说明:
1、self.abstract_class = true,表示这个模型类不会与库中的任何表有关系,也就是一个抽象的类。
2、establish_connection :typo,就是配置连接
三、编写一个具体的模型类
下面是typo库的表
+---------------------+
| Tables_in_typo |
+---------------------+
| articles |
| articles_categories |
| blacklist_patterns |
| categories |
| comments |
| page_caches |
| pages |
| pings |
| resources |
| schema_info |
| sessions |
| settings |
| sidebars |
| trackbacks |
| users |
+---------------------+
我们随便选择一个如,pages,实现它的模型;
创建文件page.rb,内容如下:
class Page<ExternalData
end
说明:
1、关键在于page这个类是从刚才定义的抽象类ExternalData中继承而来,有一个好处是这个抽象类下衍生出来的各个模型类可以共用连接池,减少数据库连接的消耗。
2、这种采用继承的方式非常方便创建其他表对应的类,不需要在模型中重复书写establish_connection :typo这样的语句。比如对settings这个表,创建setting.rb模型类文件,代码如下:
class Setting<ExternalData
end
与缺省库中的模型操作起来一样,不一样的就是父类不同而已。
四、测试看看是否成功
ruby script/console
>> ExternalData
=> ExternalData(abstract)
>> Page
=> Page(id: integer, name: string, title: string, body: text, body_html: text, text_filter: string, user_id: integer, created_at: datetime, updated_at: datetime)
>> Setting
=> Setting(id: integer, name: string, value: string)
没有问题。