master_slave 3.2.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
data/lib/master_slave/base.rb
CHANGED
@@ -5,11 +5,6 @@ module MasterSlave
|
|
5
5
|
included do
|
6
6
|
cattr_accessor :slave_connection_names
|
7
7
|
self.slave_connection_names = []
|
8
|
-
|
9
|
-
class << self
|
10
|
-
alias_method :connection_without_master_slave, :connection
|
11
|
-
alias_method :connection, :connection_with_master_slave
|
12
|
-
end
|
13
8
|
end
|
14
9
|
|
15
10
|
module ClassMethods
|
@@ -31,18 +26,16 @@ module MasterSlave
|
|
31
26
|
end
|
32
27
|
end
|
33
28
|
|
34
|
-
def
|
29
|
+
def connection
|
35
30
|
slave_block = MasterSlave::RuntimeRegistry.slave_block
|
36
31
|
current_slave_name = MasterSlave::RuntimeRegistry.current_slave_name
|
37
32
|
|
38
|
-
if
|
39
|
-
connection_without_master_slave
|
40
|
-
elsif slave_block && current_slave_name
|
33
|
+
if slave_block && current_slave_name
|
41
34
|
pool_name = MasterSlave::ConnectionHandler.connection_pool_name(current_slave_name)
|
42
35
|
ar_proxy = MasterSlave::ConnectionHandler::ArProxy.new(pool_name)
|
43
36
|
ActiveRecord::Base.connection_handler.retrieve_connection(ar_proxy)
|
44
37
|
else
|
45
|
-
|
38
|
+
super
|
46
39
|
end
|
47
40
|
end
|
48
41
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module MasterSlave
|
3
2
|
class ConnectionHandler
|
4
3
|
|
@@ -25,12 +24,10 @@ module MasterSlave
|
|
25
24
|
def setup_connection
|
26
25
|
ActiveRecord::Base.slave_connection_names ||= []
|
27
26
|
MasterSlave.config.slave_names.each do |slave_name|
|
28
|
-
# activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +128
|
29
27
|
ActiveRecord::Base.slave_connection_names << slave_name.to_s.strip
|
30
|
-
|
31
|
-
|
32
|
-
resolver = ActiveRecord::Base::ConnectionSpecification::Resolver.new(configuration, nil)
|
28
|
+
spec = MasterSlave.config.slave_config(slave_name).symbolize_keys
|
33
29
|
|
30
|
+
resolver = ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new spec, spec
|
34
31
|
spec = resolver.spec
|
35
32
|
|
36
33
|
unless ActiveRecord::Base.respond_to?(spec.adapter_method)
|
@@ -38,15 +35,8 @@ module MasterSlave
|
|
38
35
|
end
|
39
36
|
|
40
37
|
ar_proxy = ArProxy.new(connection_pool_name(slave_name))
|
41
|
-
|
42
|
-
# activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +179
|
43
|
-
# activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +424
|
44
|
-
# remove_connection 时会调用方法内部 ar_proxy.name
|
45
38
|
ActiveRecord::Base.remove_connection(ar_proxy)
|
46
|
-
|
47
|
-
# activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +373
|
48
|
-
# establish_connection 时,使用 ar_proxy.name
|
49
|
-
ActiveRecord::Base.connection_handler.establish_connection ar_proxy.name, spec
|
39
|
+
ActiveRecord::Base.connection_handler.establish_connection ar_proxy, spec
|
50
40
|
end
|
51
41
|
end
|
52
42
|
end
|
data/lib/master_slave/railtie.rb
CHANGED
@@ -3,18 +3,18 @@ module MasterSlave
|
|
3
3
|
|
4
4
|
config.after_initialize do
|
5
5
|
if File.exist?(MasterSlave::Configuration.config_file)
|
6
|
-
|
6
|
+
puts "\033[32mmaster_slave is on!\033[0m"
|
7
7
|
ActiveRecord::Base.send :include, MasterSlave::Base
|
8
8
|
MasterSlave::ConnectionHandler.setup
|
9
9
|
else
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
puts "\033[31mNo such file #{MasterSlave::Configuration.config_file}\033[0m"
|
11
|
+
puts "\033[31mPlease execute `rails g master_slave:config`\033[0m"
|
12
|
+
puts "\033[31mmaster_slave is off!\033[0m"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
generators do
|
17
|
-
require File.
|
17
|
+
require File.join(__dir__, '../', 'rails/generators/config_generator')
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -1,28 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'active_support/per_thread_registry'
|
3
|
-
rescue LoadError
|
4
|
-
module ActiveSupport
|
5
|
-
module PerThreadRegistry
|
6
|
-
protected
|
7
|
-
|
8
|
-
def method_missing(name, *args, &block) # :nodoc:
|
9
|
-
# Caches the method definition as a singleton method of the receiver.
|
10
|
-
define_singleton_method(name) do |*a, &b|
|
11
|
-
per_thread_registry_instance.public_send(name, *a, &b)
|
12
|
-
end
|
13
|
-
|
14
|
-
send(name, *args, &block)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def per_thread_registry_instance
|
20
|
-
Thread.current[name] ||= new
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
1
|
+
require 'active_support/per_thread_registry'
|
26
2
|
module MasterSlave
|
27
3
|
class RuntimeRegistry
|
28
4
|
extend ActiveSupport::PerThreadRegistry
|
data/lib/master_slave/version.rb
CHANGED
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: master_slave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Tumayun
|
8
|
+
- Tumayun
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
@@ -16,17 +16,17 @@ dependencies:
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 4.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 4.0.0
|
30
30
|
description: mysql separate read and write.
|
31
31
|
email: tumayun.2010@gmail.com
|
32
32
|
executables: []
|