This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
| name | age | message | |
|---|---|---|---|
| |
LICENSE | Fri Oct 05 22:59:57 -0700 2007 | [rick] |
| |
README | Wed Oct 01 12:30:20 -0700 2008 | [abloom] |
| |
lib/ | Wed Oct 01 12:30:20 -0700 2008 | [abloom] |
README
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
Using the MasterFilter class is quite simple. If you have any actions you know require
the Master DB for both reads and writes simply do the following:
class RandomController < ApplicationController
around_filter ActiveReload::MasterFilter, :only => [:show, :edit, :update]
...
end




