Class: ActiveRecord::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/mysql_replication_adapter/ar_base_ext.rb

Class Method Summary collapse

Class Method Details

.calculate(operation, column_name, options = {}) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 57

def calculate(operation, column_name, options ={})
  use_slave = options.delete(:use_slave)
  if use_slave && connection.is_a?(ConnectionAdapters::MysqlReplicationAdapter)
    connection.load_balance_query {old_calculate(operation, column_name, options)}
  else
    old_calculate(operation, column_name, options)
  end
end

.find_by_sql(sql, use_slave = false) ⇒ Object

Override find_by_sql so that you can tell it to selectively use a slave machine



47
48
49
50
51
52
53
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 47

def find_by_sql(sql, use_slave = false)
  if use_slave && connection.is_a?(ConnectionAdapters::MysqlReplicationAdapter)
    connection.load_balance_query {old_find_by_sql sql}
  else
    old_find_by_sql sql
  end
end

.find_every(options) ⇒ Object

Override the standard find to check for the :use_slave option. When specified, the resulting query will be sent to a slave machine.



34
35
36
37
38
39
40
41
42
43
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 34

def find_every(options)
  result = if options[:use_slave] && connection.is_a?(ConnectionAdapters::MysqlReplicationAdapter)
    connection.load_balance_query do
      old_find_every(options)
    end
  else
    old_find_every(options)
  end
  result
end

.mysql_replication_connection(config) ⇒ Object

Establishes a connection to the database that’s used by all Active Record objects.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 7

def mysql_replication_connection(config) # :nodoc:
  config = config.symbolize_keys
  host     = config[:host]
  port     = config[:port]
  socket   = config[:socket]
  username = config[:username] ? config[:username].to_s : 'root'
  password = config[:password].to_s

  if config.has_key?(:database)
    database = config[:database]
  else
    raise ArgumentError, "No database specified. Missing argument: database."
  end

  require_mysql
  mysql = Mysql.init
  mysql.ssl_set(config[:sslkey], config[:sslcert], config[:sslca], config[:sslcapath], config[:sslcipher]) if config[:sslkey]

  ConnectionAdapters::MysqlReplicationAdapter.new(mysql, logger, [host, username, password, database, port, socket], config)
end

.old_calculateObject



55
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 55

alias_method :old_calculate, :calculate

.old_find_by_sqlObject



45
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 45

alias_method :old_find_by_sql, :find_by_sql

.old_find_everyObject



28
# File 'lib/mysql_replication_adapter/ar_base_ext.rb', line 28

alias_method :old_find_every, :find_every