帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:Master  Active  act  Activerecord  Connections  Proxy  
ActiveRecord connection proxy for master/slave connections

  • 源代码名称:masochism
  • 源代码网址:http://www.github.com/technoweenie/masochism
  • masochism源代码文档
  • masochism源代码下载
  • Git URL:
    git://www.github.com/technoweenie/masochism.git
  • Git Clone代码到本地:
    git clone http://www.github.com/technoweenie/masochism
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/technoweenie/masochism
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • masochism

    照片由 ArtWerk

    masochism插件为 Ruby on Rails 应用程序在复制的数据库环境中工作提供了一个简单的解决方案。 它通过替换由 connection 模型访问的对象来工作,在执行查询时在主和从之间选择。 一般情况下,所有的写。

    快速安装

    首先,设置你的database.yml:

    # default configuration (slave)
    production: &defaults
     adapter: mysql
     database: app_production
     username: webapp
     password: ********
     host: localhost
    # setup for masochism (master)
    master_database:
     <<: *defaults
     host: master.example.com

    要启用 masochism,这是必需的:

    # enable masochism
    ActiveReload::ConnectionProxy.setup!

    使用方法的示例:

    # in environment.rb
    config.after_initialize do
     if Rails.env.production?
     ActiveReload::ConnectionProxy::setup!
     end
    end

    考虑

    Thinking

    Thinking检查 connection 对象以确定数据库适配器。 由于masochism通过将连接代理放在它的位置来工作,因此TS将对 ActiveReload::ConnectionProxy 和中止。 一个可能的解决办法是在启用masochism之后,将 TS TS权设置为 hardcode

    # ConnectionProxy from masochism confuses TS
    ThinkingSphinx::Index.class_eval do
     def adapter() :mysql end
    end
    ThinkingSphinx::AbstractAdapter.class_eval do
     def self.detect(model)
     ThinkingSphinx::MysqlAdapter
     end
    end

    Litespeed服务器或者Phusion乘客( mod_rails )

    如果使用,服务器或者客户( mod_rails ),则在创建时初始化子进程,这意味着在环境文件中将有效地忽略。 关于这个问题的简短讨论在这里。

    litespeed/旅客的一个解决方案是在第一次请求时检查连接,如果你的连接还没有初始化,则执行 setup 调用,如:!

    # in ApplicationController
    prepend_before_filter do |controller|
     unless ActiveRecord::Base.connection.is_a? ActiveReload::ConnectionProxy
     ActiveReload::ConnectionProxy.setup!
     end
    end

    高级

    ActiveReload::MasterDatabase 模型使用'master_database'设置,可以为所有环境定义,也可以为每个环境定义为嵌套的声明。

    ActiveReload::SlaveDatabase 模型使用的'slave_database'设置只能在每个环境中定义。

    例如:

    login: &login
     adapter: postgresql
     host: localhost
     port: 5432
    production:
     database: production_slave_database_name
     <<: *login
    master_database:
     database: production_master_database_name
     <<: *login
    staging:
     database: staging_database_name
     host: slave-db-pool.local
     <<: *login
     master_database: 
     database: staging_database_name
     host: master-db-server.local
     <<: *login
    qa:
     database: qa_master_database_name
     host: qa-master
     <<: *login
     slave_database:
     database: qa_slave_database_name
     host: qa-slave
     <<: *login
    development: # Does not use masochism
     database: development_database_name
     <<: *login

    如果希望模型始终使用主数据库,则可以继承 ActiveReload::MasterDatabase 。 任何具有自己的数据库连接的模型都不会受到影响。

    设置时更多控制

    默认情况下,masochism setup 为以下属性的shorthand:!

    ActiveReload::ConnectionProxy.setup_for ActiveReload::MasterDatabase, ActiveRecord::Base

    第一个参数是建立主数据库连接的模型;第二个参数是 connection 被ConnectionProxy劫持的模型。 但是我们根本不需要接触 ActiveRecord::Base:

    # set up MyMaster's connection as the master database connection for User:
    ActiveReload::ConnectionProxy.setup_for MyMaster, User

    控制器筛选器

    如果你所知道的任何操作都需要主数据库进行读写,只需执行以下操作:

    # in a controller:
    around_filter ActiveReload::MasterFilter, :only => [:show, :edit, :update]


    文章标签:act  Proxy  Active  Master  Activerecord  Connections  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语