active_record_slave 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/active_record_slave.rb +1 -1
- data/lib/active_record_slave/active_record_slave.rb +8 -1
- data/lib/active_record_slave/{instance_methods.rb → extensions.rb} +17 -21
- data/lib/active_record_slave/railtie.rb +1 -1
- data/lib/active_record_slave/version.rb +1 -1
- data/test/test.sqlite3 +0 -0
- data/test/test_slave.sqlite3 +0 -0
- metadata +14 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ece72c2fdbcd88aa6ef845d9e701fba095239e3becc489b6495b216a1c8d7f02
|
4
|
+
data.tar.gz: 1343f64ddcde6a67efcd0ed0672de9ce2c6af5aab4198016c95938be5025cb99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8fd05e7119804c713946d2307cc780905580700db4e01fb04e91372dba5af5a18481b9939c82b6d62b8045730b8cd9d298af29c71c9b21c27b26946daaef875
|
7
|
+
data.tar.gz: a4e85091bf16b789195e50e44cd2a025d6ce30733c9947d770f9e643f9197829ab429d313d9d5b9a5344b5818e18e9639fa66e256552946bca8a28c65b70d4f3
|
data/README.md
CHANGED
@@ -22,6 +22,7 @@ Production Ready. Actively used in large production environments.
|
|
22
22
|
* Works with any database driver that works with ActiveRecord.
|
23
23
|
* Supports all Rails 3, 4, or 5 read apis.
|
24
24
|
* Including dynamic finders, AREL, and ActiveRecord::Base.select.
|
25
|
+
* **NOTE**: In Rails 3 and 4, QueryCache is only enabled for BaseConnection by default. In Rails 5, it's enabled for all connections. [(PR)](https://github.com/rails/rails/pull/28869)
|
25
26
|
* Transaction aware
|
26
27
|
* Detects when a query is inside of a transaction and sends those reads to the master by default.
|
27
28
|
* Can be configured to send reads in a transaction to slave databases.
|
data/lib/active_record_slave.rb
CHANGED
@@ -3,8 +3,8 @@ require 'active_record/base'
|
|
3
3
|
require 'active_record_slave/version'
|
4
4
|
require 'active_record_slave/errors'
|
5
5
|
require 'active_record_slave/slave'
|
6
|
-
require 'active_record_slave/instance_methods'
|
7
6
|
require 'active_record_slave/active_record_slave'
|
7
|
+
require 'active_record_slave/extensions'
|
8
8
|
|
9
9
|
if defined?(Rails)
|
10
10
|
require 'active_record_slave/railtie'
|
@@ -2,6 +2,13 @@
|
|
2
2
|
# ActiveRecord read from a slave
|
3
3
|
#
|
4
4
|
module ActiveRecordSlave
|
5
|
+
# Select Methods
|
6
|
+
SELECT_METHODS = [:select, :select_all, :select_one, :select_rows, :select_value, :select_values]
|
7
|
+
|
8
|
+
# In case in the future we are forced to intercept connection#execute if the
|
9
|
+
# above select methods are not sufficient
|
10
|
+
# SQL_READS = /\A\s*(SELECT|WITH|SHOW|CALL|EXPLAIN|DESCRIBE)/i
|
11
|
+
|
5
12
|
# Install ActiveRecord::Slave into ActiveRecord to redirect reads to the slave
|
6
13
|
# Parameters:
|
7
14
|
# adapter_class:
|
@@ -24,7 +31,7 @@ module ActiveRecordSlave
|
|
24
31
|
|
25
32
|
# Inject a new #select method into the ActiveRecord Database adapter
|
26
33
|
base = adapter_class || ActiveRecord::Base.connection.class
|
27
|
-
base.
|
34
|
+
base.include(Extensions)
|
28
35
|
else
|
29
36
|
ActiveRecord::Base.logger.info "ActiveRecordSlave not installed since no slave database defined"
|
30
37
|
end
|
@@ -1,24 +1,22 @@
|
|
1
|
+
require 'active_support/concern'
|
1
2
|
module ActiveRecordSlave
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
eval <<-METHOD
|
14
|
-
def #{select_method}(sql, name = nil, *args)
|
15
|
-
return super if active_record_slave_read_from_master?
|
16
|
-
|
17
|
-
ActiveRecordSlave.read_from_master do
|
18
|
-
Slave.connection.#{select_method}(sql, "Slave: \#{name || 'SQL'}", *args)
|
3
|
+
module Extensions
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
ActiveRecordSlave::SELECT_METHODS.each do |select_method|
|
7
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
8
|
+
def #{select_method}(sql, name = nil, *args)
|
9
|
+
return super if active_record_slave_read_from_master?
|
10
|
+
|
11
|
+
ActiveRecordSlave.read_from_master do
|
12
|
+
reader_connection.#{select_method}(sql, "Slave: \#{name || 'SQL'}", *args)
|
13
|
+
end
|
19
14
|
end
|
20
|
-
|
21
|
-
|
15
|
+
RUBY
|
16
|
+
end
|
17
|
+
|
18
|
+
def reader_connection
|
19
|
+
Slave.connection
|
22
20
|
end
|
23
21
|
|
24
22
|
def begin_db_transaction
|
@@ -63,7 +61,5 @@ module ActiveRecordSlave
|
|
63
61
|
ActiveRecordSlave.read_from_master? ||
|
64
62
|
(open_transactions > 0) && !ActiveRecordSlave.ignore_transactions?
|
65
63
|
end
|
66
|
-
|
67
64
|
end
|
68
65
|
end
|
69
|
-
|
@@ -16,7 +16,7 @@ module ActiveRecordSlave
|
|
16
16
|
config.active_record_slave = ::ActiveRecordSlave
|
17
17
|
|
18
18
|
# Initialize ActiveRecordSlave
|
19
|
-
initializer "load active_record_slave", :
|
19
|
+
initializer "load active_record_slave", after: "active_record.initialize_database" do
|
20
20
|
ActiveRecordSlave.install!
|
21
21
|
end
|
22
22
|
|
data/test/test.sqlite3
ADDED
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_slave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 6.0.0
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '3.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 6.0.0
|
27
33
|
description:
|
28
34
|
email:
|
29
35
|
- reidmo@gmail.com
|
@@ -37,13 +43,15 @@ files:
|
|
37
43
|
- lib/active_record_slave.rb
|
38
44
|
- lib/active_record_slave/active_record_slave.rb
|
39
45
|
- lib/active_record_slave/errors.rb
|
40
|
-
- lib/active_record_slave/
|
46
|
+
- lib/active_record_slave/extensions.rb
|
41
47
|
- lib/active_record_slave/railtie.rb
|
42
48
|
- lib/active_record_slave/slave.rb
|
43
49
|
- lib/active_record_slave/version.rb
|
44
50
|
- test/active_record_slave_test.rb
|
45
51
|
- test/database.yml
|
52
|
+
- test/test.sqlite3
|
46
53
|
- test/test_helper.rb
|
54
|
+
- test/test_slave.sqlite3
|
47
55
|
homepage: https://github.com/rocketjob/active_record_slave
|
48
56
|
licenses:
|
49
57
|
- Apache-2.0
|
@@ -63,12 +71,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
71
|
- !ruby/object:Gem::Version
|
64
72
|
version: '0'
|
65
73
|
requirements: []
|
66
|
-
rubygems_version: 3.0.
|
74
|
+
rubygems_version: 3.0.6
|
67
75
|
signing_key:
|
68
76
|
specification_version: 4
|
69
77
|
summary: Redirect ActiveRecord (Rails) reads to slave databases while ensuring all
|
70
78
|
writes go to the master database.
|
71
79
|
test_files:
|
80
|
+
- test/test_slave.sqlite3
|
72
81
|
- test/active_record_slave_test.rb
|
82
|
+
- test/test.sqlite3
|
73
83
|
- test/database.yml
|
74
84
|
- test/test_helper.rb
|