forked from technoweenie/masochism
-
Notifications
You must be signed in to change notification settings - Fork 0
ActiveRecord connection proxy for master/slave connections
License
elitau/masochism
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
masochism ========= The masochism plugin provides an easy solution for Ruby on Rails applications to work in a replicated database environment. Connection proxy sends some database queries (those in a transaction, update statements, and ActiveRecord::Base#reload) to a master database, and the rest to the slave database. The ActiveReload::MasterDatabase model uses a 'master_database' setting that can either be defined for all of your environments, or for each environment as a nested declaration: # config/database.yml 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 development: # Does not use masochism database: development_database_name <<: *login To setup: Whether you want this in production only, or maybe just your deployment server, is up to you. Just call the following method in your desired environment file. ActiveReload::ConnectionProxy.setup! Some suggestions: * in a config/initializer * config.after_initialize block If you are using the Litespeed web server, child processes are initialized on creation, which means any setup done in an environment file will be effectively ignored. A brief discussion of the problem is posted here: http://litespeedtech.com/support/wiki/doku.php?id=litespeed_wiki:rails:memcache One solution for Litespeed users is to check the connection at your first request and do the setup! call if your connection hasn't been initialized, like: class ApplicationController < ActionController::Base prepend_before_filter do |controller| ActiveReload::ConnectionProxy.setup! unless ActiveRecord::Base.connection.is_a? ActiveReload::ConnectionProxy end ... end If you want a model to always use the Master database, you can inherit ActiveRelaod::MasterDatabase. Any models with their own database connection will not be affected. Setting up your own proxies: # Sets up MyMaster's connection as the master database connection for User. ActiveReload::ConnectionProxy.setup_for MyMaster, User
About
ActiveRecord connection proxy for master/slave connections
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- Ruby 100.0%