active_record_shards 3.8.0 → 3.9.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 -1
- data/lib/{active_record_shards-4-1.rb → active_record_shards-4-2.rb} +0 -0
- data/lib/active_record_shards.rb +2 -4
- data/lib/active_record_shards/connection_specification.rb +1 -1
- data/lib/active_record_shards/connection_switcher-4-0.rb +7 -7
- data/lib/active_record_shards/connection_switcher-5-0.rb +2 -9
- data/lib/active_record_shards/connection_switcher-5-1.rb +25 -0
- data/lib/active_record_shards/connection_switcher.rb +19 -7
- metadata +5 -5
- data/lib/active_record_shards-4-0.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a95ee1107402ac016dcd5dbe7caf84b77973c5e
|
4
|
+
data.tar.gz: 7871eaecc9cf5971d2b1a35f002a8c0c82b1951c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edb32557a10fce0738d2015bcf4e747f00ec1b49cc72a99c1cbbfbd3d4583a202e19087abb374e434bd87387e7e0ef5e584b046ca2888d0fc6774c63e026ac6c
|
7
|
+
data.tar.gz: bd8d79125096f2228cf4d862b3fac99b346c303b4f4304d70c7294906c239a5b85f2342d7721984413879541620c6927ee64c4320fbb8ee53649f2f09143c8e0
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
ActiveRecord Shards is an extension for ActiveRecord that provides support for sharded database and slaves. Basically it is just a nice way to
|
6
6
|
switch between database connections. We've made the implementation very small, and have tried not to reinvent any wheels already present in ActiveRecord.
|
7
7
|
|
8
|
-
ActiveRecord Shards has been used and tested on Rails 3.2, 4.
|
8
|
+
ActiveRecord Shards has been used and tested on Rails 3.2, 4.2 and 5.0 and has in some form or another been used in production on a large Rails app for several years.
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
File without changes
|
data/lib/active_record_shards.rb
CHANGED
@@ -28,10 +28,8 @@ ActiveRecord::Associations::CollectionProxy.include(ActiveRecordShards::Associat
|
|
28
28
|
case "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
|
29
29
|
when '3.2'
|
30
30
|
require 'active_record_shards-3-2'
|
31
|
-
when '4.
|
32
|
-
require 'active_record_shards-4-
|
33
|
-
when '4.1', '4.2'
|
34
|
-
require 'active_record_shards-4-1'
|
31
|
+
when '4.2'
|
32
|
+
require 'active_record_shards-4-2'
|
35
33
|
when '5.0', '5.1'
|
36
34
|
require 'active_record_shards-5-0'
|
37
35
|
else
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
ActiveRecord::Base.class_eval do
|
3
3
|
def self.establish_connection(spec = ENV["DATABASE_URL"])
|
4
|
-
if ActiveRecord::VERSION::
|
4
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
5
5
|
spec ||= ActiveRecord::ConnectionHandling::DEFAULT_ENV.call
|
6
6
|
spec = spec.to_sym if spec.is_a?(String)
|
7
7
|
resolver = ActiveRecordShards::ConnectionSpecification::Resolver.new configurations
|
@@ -30,19 +30,19 @@ module ActiveRecordShards
|
|
30
30
|
|
31
31
|
# note that since we're subverting the standard establish_connection path, we have to handle the funky autoloading of the
|
32
32
|
# connection adapter ourselves.
|
33
|
-
|
34
|
-
|
33
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
34
|
+
specification_cache[name] ||= begin
|
35
35
|
resolver = ActiveRecordShards::ConnectionSpecification::Resolver.new configurations
|
36
36
|
resolver.spec(spec)
|
37
|
-
else
|
38
|
-
resolver = ActiveRecordShards::ConnectionSpecification::Resolver.new spec, configurations
|
39
|
-
resolver.spec
|
40
37
|
end
|
41
|
-
end
|
42
38
|
|
43
|
-
if ActiveRecord::VERSION::MAJOR >= 4
|
44
39
|
connection_handler.establish_connection(self, specification_cache[name])
|
45
40
|
else
|
41
|
+
specification_cache[name] ||= begin
|
42
|
+
resolver = ActiveRecordShards::ConnectionSpecification::Resolver.new spec, configurations
|
43
|
+
resolver.spec
|
44
|
+
end
|
45
|
+
|
46
46
|
connection_handler.establish_connection(connection_pool_name, specification_cache[name])
|
47
47
|
end
|
48
48
|
end
|
@@ -20,15 +20,8 @@ module ActiveRecordShards
|
|
20
20
|
|
21
21
|
pool = connection_handler.retrieve_connection_pool(spec_name)
|
22
22
|
if pool.nil?
|
23
|
-
|
24
|
-
|
25
|
-
resolver = ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(configurations)
|
26
|
-
resolver.spec(spec_name.to_sym, spec_name)
|
27
|
-
else
|
28
|
-
# Resolver will be applied by Rails 5.1+
|
29
|
-
spec_name.to_sym
|
30
|
-
end
|
31
|
-
|
23
|
+
resolver = ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(configurations)
|
24
|
+
spec = resolver.spec(spec_name.to_sym, spec_name)
|
32
25
|
connection_handler.establish_connection(spec)
|
33
26
|
end
|
34
27
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActiveRecordShards
|
2
|
+
module ConnectionSwitcher
|
3
|
+
def connection_specification_name
|
4
|
+
name = current_shard_selection.resolve_connection_name(sharded: is_sharded?, configurations: configurations)
|
5
|
+
|
6
|
+
unless configurations[name] || name == "primary"
|
7
|
+
raise ActiveRecord::AdapterNotSpecified, "No database defined by #{name} in database.yml"
|
8
|
+
end
|
9
|
+
|
10
|
+
name
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def ensure_shard_connection
|
16
|
+
# See if we've connected before. If not, call `#establish_connection`
|
17
|
+
# so that ActiveRecord can resolve connection_specification_name to an
|
18
|
+
# ARS connection.
|
19
|
+
spec_name = connection_specification_name
|
20
|
+
|
21
|
+
pool = connection_handler.retrieve_connection_pool(spec_name)
|
22
|
+
connection_handler.establish_connection(spec_name.to_sym) if pool.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -158,11 +158,21 @@ module ActiveRecordShards
|
|
158
158
|
ActiveRecordShards.rails_env
|
159
159
|
end
|
160
160
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
161
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
162
|
+
def with_default_shard
|
163
|
+
if is_sharded? && current_shard_id.nil? && table_name != ActiveRecord::SchemaMigration.table_name
|
164
|
+
on_first_shard { yield }
|
165
|
+
else
|
166
|
+
yield
|
167
|
+
end
|
168
|
+
end
|
169
|
+
else
|
170
|
+
def with_default_shard
|
171
|
+
if is_sharded? && current_shard_id.nil? && table_name != ActiveRecord::Migrator.schema_migrations_table_name
|
172
|
+
on_first_shard { yield }
|
173
|
+
else
|
174
|
+
yield
|
175
|
+
end
|
166
176
|
end
|
167
177
|
end
|
168
178
|
|
@@ -188,10 +198,12 @@ module ActiveRecordShards
|
|
188
198
|
end
|
189
199
|
|
190
200
|
case "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
|
191
|
-
when '3.2', '4.
|
201
|
+
when '3.2', '4.2'
|
192
202
|
require 'active_record_shards/connection_switcher-4-0'
|
193
|
-
when '5.0'
|
203
|
+
when '5.0'
|
194
204
|
require 'active_record_shards/connection_switcher-5-0'
|
205
|
+
when '5.1'
|
206
|
+
require 'active_record_shards/connection_switcher-5-1'
|
195
207
|
else
|
196
208
|
raise "ActiveRecordShards is not compatible with #{ActiveRecord::VERSION::STRING}"
|
197
209
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_shards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-03-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -189,8 +189,7 @@ extra_rdoc_files: []
|
|
189
189
|
files:
|
190
190
|
- README.md
|
191
191
|
- lib/active_record_shards-3-2.rb
|
192
|
-
- lib/active_record_shards-4-
|
193
|
-
- lib/active_record_shards-4-1.rb
|
192
|
+
- lib/active_record_shards-4-2.rb
|
194
193
|
- lib/active_record_shards-5-0.rb
|
195
194
|
- lib/active_record_shards.rb
|
196
195
|
- lib/active_record_shards/association_collection_connection_selection.rb
|
@@ -200,6 +199,7 @@ files:
|
|
200
199
|
- lib/active_record_shards/connection_specification.rb
|
201
200
|
- lib/active_record_shards/connection_switcher-4-0.rb
|
202
201
|
- lib/active_record_shards/connection_switcher-5-0.rb
|
202
|
+
- lib/active_record_shards/connection_switcher-5-1.rb
|
203
203
|
- lib/active_record_shards/connection_switcher.rb
|
204
204
|
- lib/active_record_shards/default_slave_patches.rb
|
205
205
|
- lib/active_record_shards/migration.rb
|
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
228
|
version: '0'
|
229
229
|
requirements: []
|
230
230
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.5.
|
231
|
+
rubygems_version: 2.5.2
|
232
232
|
signing_key:
|
233
233
|
specification_version: 4
|
234
234
|
summary: Simple database switching for ActiveRecord.
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'active_record_shards/connection_pool'
|
3
|
-
require 'active_record_shards/connection_handler'
|
4
|
-
require 'active_record_shards/connection_specification'
|
5
|
-
require 'active_record_shards/schema_dumper_extension'
|
6
|
-
|
7
|
-
ActiveRecordShards::ConnectionSpecification = ActiveRecord::ConnectionAdapters::ConnectionSpecification
|
8
|
-
methods_to_override = [:establish_connection, :remove_connection, :pool_for, :pool_from_any_process_for]
|
9
|
-
ActiveRecordShards.override_connection_handler_methods(methods_to_override)
|
10
|
-
|
11
|
-
ActiveRecord::Associations::Preloader::HasAndBelongsToMany.include(ActiveRecordShards::DefaultSlavePatches::HasAndBelongsToManyPreloaderPatches)
|
12
|
-
|
13
|
-
ActiveRecord::SchemaDumper.prepend(ActiveRecordShards::SchemaDumperExtension)
|