From 0b58f4511dbc2747912935b24725892cae403ec9 Mon Sep 17 00:00:00 2001 From: Justin Mecham Date: Tue, 1 Jul 2008 15:54:07 -0400 Subject: [PATCH] Added support for declaring your master database configuration per-environment (with a fallback to the old behavior of looking for a single declaration of "master_database"). To use, simply nest a master_database declaration in the desired environment: login: &login adapter: mysql username: database_user password: foo staging: database: staging_database host: stage-db-server.local <<: *login master_database: database: staging_database host: master-db-server.local <<: *login --- README | 26 ++++++++++++++++++++------ lib/active_reload/connection_proxy.rb | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/README b/README index 49e9326..376f421 100644 --- a/README +++ b/README @@ -1,13 +1,14 @@ 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. +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 @@ -16,11 +17,24 @@ database.yml to serve as the master database. port: 5432 production: - database: slave_database_name + database: production_slave_database_name <<: *login - + master_database: - database: master_database_name + 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: diff --git a/lib/active_reload/connection_proxy.rb b/lib/active_reload/connection_proxy.rb index c3896eb..0d115be 100644 --- a/lib/active_reload/connection_proxy.rb +++ b/lib/active_reload/connection_proxy.rb @@ -1,7 +1,7 @@ module ActiveReload class MasterDatabase < ActiveRecord::Base self.abstract_class = true - establish_connection :master_database + establish_connection configurations[Rails.env]['master_database'] || :master_database end class ConnectionProxy