active_record_shards 3.8.0 → 3.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|