欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

rails 读写分离

程序员文章站 2022-05-21 10:49:52
...
开发环境下实现rails的读写分离:

首先: 一定要保证主从数据库的完全相同,这是以下的前提。
实现功能: select操作在slave数据库操作,而非select(insert、update、delete)操作在master数据库操作。



1: 安装masochism和master_slave_adapter插件

ruby script/plugin install git://github.com/technoweenie/masochism.git

ruby script/plugin install git://github.com/mauricio/master_slave_adapter.git

插件介绍:
  masochism 作用:  实现读写分离(注意:其实无法实现读写分离) 
  master_slave_adapter作用:  弥补masochism的不能实现分离的问题

2: 进入config/environments/development.rb

1》 打开缓存(production环境下缓存默认打开)
config.action_controller.perform_caching = true

2》 通过ActiveReload将读写分离操作分开

config.after_initialize do
  ActiveReload::ConnectionProxy.setup!
end

注意:  如果是production模式下进行数据库读写分离,则如下:

config.after_initialize do
  if Rails.env.production?
    ActiveReload::ConnectionProxy::setup!
  end
end



3:  配置database.yml(以一个实例的方式描述database.yml的配置)

development:
  host: 192.168.0.129
  adapter: master_slave
  master_slave_adapter: mysql
  database: readwrite1
  username: zhidu
  password: zhidu
  socket: /var/run/mysqld/mysqld.sock
  master:
    database: readwrite1
    username: zcy
    password: 1234
    host: 192.168.0.130
    adapter: mysql



配置介绍(只介绍其中一部分,例如encoding、reconnect等没有介绍,如果需要,请自己查找吧,顺便说一句,有一些有默认值的不需要配置):
  database(development): slave数据库名称
  username: 用户名称
  password:  用户密码
  socket:    指定mysqld.sock的位置
  adapter:   必须指定master_slave
  master_slave_adapter:  指定真正的适配器(mysql)
  host:  slave数据库的地址
  master: 主数据库的设置

  disable_connection_test: this will disable the connection test before use,can possibly improve the performance but you could also hit stale connections, default is false

  eager_load_connections:   connections are lazy loaded by default, you can load gem eagerly setting this to true

4: 成功