forked from technoweenie/masochism
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
62 lines (44 loc) · 1.96 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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 in
database.yml to serve as the master database.
# config/database.yml
login: &login
adapter: postgresql
host: localhost
port: 5432
production:
database: slave_database_name
<<: *login
master_database:
database: master_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