active_record_shards 3.7.0 → 3.7.1
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 +2 -2
- data/lib/active_record_shards.rb +1 -1
- data/lib/active_record_shards/connection_switcher-4-0.rb +2 -3
- data/lib/active_record_shards/connection_switcher-5-0.rb +1 -1
- data/lib/active_record_shards/connection_switcher.rb +2 -2
- data/lib/active_record_shards/default_slave_patches.rb +10 -3
- data/lib/active_record_shards/migration.rb +4 -5
- data/lib/active_record_shards/schema_dumper_extension.rb +1 -4
- data/lib/active_record_shards/shard_selection.rb +1 -1
- data/lib/active_record_shards/shard_support.rb +1 -1
- data/lib/active_record_shards/tasks.rb +2 -2
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e203b68170add3e662a225149760c94ddec6a25
|
4
|
+
data.tar.gz: 0cd9762ecefd6e9c0fa52a244a142573d45a299d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91264360257099f210038dc7794b26a142a418e23cb66b24abd1b8e3ae8868266886d9de7a8ae529864e6dd0a5243afeafda29d269ef1fddc8cfe41a0e830455
|
7
|
+
data.tar.gz: a607aad5fc1d32f4df67f331e1a651731c2b1900e8c7d52ffdccd56bf5d760fe61da456495d196e5521bda5817b541b178beb112dbeab26b4bae94f8433d5352
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](http://travis-ci.org/zendesk/active_record_shards)
|
2
|
+
|
1
3
|
# ActiveRecord Shards
|
2
4
|
|
3
5
|
ActiveRecord Shards is an extension for ActiveRecord that provides support for sharded database and slaves. Basically it is just a nice way to
|
@@ -95,5 +97,3 @@ Copyright (c) 2011 Zendesk. See LICENSE for details.
|
|
95
97
|
|
96
98
|
## Authors
|
97
99
|
Mick Staugaard, Eric Chapweske
|
98
|
-
|
99
|
-
[](http://travis-ci.org/osheroff/active_record_shards)
|
data/lib/active_record_shards.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module ActiveRecordShards
|
2
2
|
module ConnectionSwitcher
|
3
|
-
|
4
3
|
# Name of the connection pool. Used by ConnectionHandler to retrieve the current connection pool.
|
5
4
|
def connection_pool_name # :nodoc:
|
6
5
|
name = current_shard_selection.shard_name(self)
|
@@ -22,7 +21,7 @@ module ActiveRecordShards
|
|
22
21
|
name = connection_pool_name
|
23
22
|
spec = configurations[name]
|
24
23
|
|
25
|
-
raise
|
24
|
+
raise(ActiveRecord::AdapterNotSpecified, "No database defined by #{name} in database.yml") if spec.nil?
|
26
25
|
|
27
26
|
# in 3.2 rails is asking for a connection pool in a map of these ConnectionSpecifications. If we want to re-use connections,
|
28
27
|
# we need to re-use specs.
|
@@ -61,7 +60,7 @@ module ActiveRecordShards
|
|
61
60
|
specs_to_pools = connection_handler.connection_pools
|
62
61
|
end
|
63
62
|
|
64
|
-
specs_to_pools.
|
63
|
+
specs_to_pools.key?(connection_pool_key)
|
65
64
|
end
|
66
65
|
end
|
67
66
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ActiveRecordShards
|
2
2
|
module ConnectionSwitcher
|
3
3
|
def connection_specification_name
|
4
|
-
name = current_shard_selection.resolve_connection_name(sharded: is_sharded?, configurations:
|
4
|
+
name = current_shard_selection.resolve_connection_name(sharded: is_sharded?, configurations: configurations)
|
5
5
|
|
6
6
|
raise "No configuration found for #{name}" unless configurations[name] || name == "primary"
|
7
7
|
name
|
@@ -141,11 +141,11 @@ module ActiveRecordShards
|
|
141
141
|
|
142
142
|
def switch_connection(options)
|
143
143
|
if options.any?
|
144
|
-
if options.
|
144
|
+
if options.key?(:slave)
|
145
145
|
current_shard_selection.on_slave = options[:slave]
|
146
146
|
end
|
147
147
|
|
148
|
-
if options.
|
148
|
+
if options.key?(:shard)
|
149
149
|
current_shard_selection.shard = options[:shard]
|
150
150
|
end
|
151
151
|
|
@@ -11,7 +11,7 @@ module ActiveRecordShards
|
|
11
11
|
return unless base_methods.include?(method)
|
12
12
|
_, method, punctuation = method.to_s.match(/^(.*?)([\?\!]?)$/).to_a
|
13
13
|
base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
14
|
-
#{class_method ?
|
14
|
+
#{class_method ? 'class << self' : ''}
|
15
15
|
def #{method}_with_default_slave#{punctuation}(*args, &block)
|
16
16
|
on_slave_unless_tx do
|
17
17
|
#{method}_without_default_slave#{punctuation}(*args, &block)
|
@@ -20,7 +20,7 @@ module ActiveRecordShards
|
|
20
20
|
|
21
21
|
alias_method :#{method}_without_default_slave#{punctuation}, :#{method}#{punctuation}
|
22
22
|
alias_method :#{method}#{punctuation}, :#{method}_with_default_slave#{punctuation}
|
23
|
-
#{class_method ?
|
23
|
+
#{class_method ? 'end' : ''}
|
24
24
|
RUBY
|
25
25
|
end
|
26
26
|
|
@@ -58,7 +58,7 @@ module ActiveRecordShards
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
CLASS_SLAVE_METHODS = [
|
61
|
+
CLASS_SLAVE_METHODS = [:find_by_sql, :count_by_sql, :calculate, :find_one, :find_some, :find_every, :exists?, :table_exists?]
|
62
62
|
|
63
63
|
def self.extended(base)
|
64
64
|
CLASS_SLAVE_METHODS.each { |m| ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(true, base, m) }
|
@@ -96,6 +96,13 @@ module ActiveRecordShards
|
|
96
96
|
[:calculate, :exists?, :pluck, :find_with_associations].each do |m|
|
97
97
|
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, m)
|
98
98
|
end
|
99
|
+
|
100
|
+
# ActiveRecord::Explain in v3 will eagerly establish an on_master
|
101
|
+
# connection just to just the _static_ `supports_explain?` method on
|
102
|
+
# the Mysql2Adapter
|
103
|
+
if ActiveRecord::VERSION::MAJOR == 3
|
104
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, :logging_query_plan)
|
105
|
+
end
|
99
106
|
end
|
100
107
|
|
101
108
|
def on_slave_unless_tx
|
@@ -5,17 +5,17 @@ module ActiveRecord
|
|
5
5
|
[:up, :down, :run].each do |m|
|
6
6
|
define_method("#{m}_with_sharding") do |*args|
|
7
7
|
ActiveRecord::Base.on_shard(nil) do
|
8
|
-
|
8
|
+
send("#{m}_without_sharding", *args)
|
9
9
|
end
|
10
10
|
ActiveRecord::Base.on_all_shards do
|
11
|
-
|
11
|
+
send("#{m}_without_sharding", *args)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
alias_method :"#{m}_without_sharding", m.to_sym
|
15
15
|
alias_method m.to_sym, :"#{m}_with_sharding"
|
16
16
|
end
|
17
17
|
|
18
|
-
def bootstrap_migrations_from_nil_shard(migrations_path, this_migration=nil)
|
18
|
+
def bootstrap_migrations_from_nil_shard(migrations_path, this_migration = nil)
|
19
19
|
migrations = nil
|
20
20
|
ActiveRecord::Base.on_shard(nil) do
|
21
21
|
migrations = ActiveRecord::Migrator.new(:up, migrations_path).migrated
|
@@ -78,7 +78,6 @@ module ActiveRecordShards
|
|
78
78
|
def shard(arg = nil)
|
79
79
|
self.migration_shard = arg
|
80
80
|
end
|
81
|
-
|
82
81
|
end
|
83
82
|
|
84
83
|
# ok, so some 'splaining to do. Rails 3.1 puts the migrate() method on the instance of the
|
@@ -87,7 +86,7 @@ module ActiveRecordShards
|
|
87
86
|
module ActualMigrationExtension
|
88
87
|
def migrate_with_forced_shard(direction)
|
89
88
|
if migration_shard.blank?
|
90
|
-
raise
|
89
|
+
raise "#{name}: Can't run migrations without a shard spec: this may be :all, :none,
|
91
90
|
or a specific shard (for data-fixups). please call shard(arg) in your migration."
|
92
91
|
end
|
93
92
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module ActiveRecordShards
|
3
3
|
module SchemaDumperExtension
|
4
|
-
|
5
4
|
def dump(stream)
|
6
5
|
stream = super(stream)
|
7
6
|
original_connection = @connection
|
@@ -21,7 +20,6 @@ module ActiveRecordShards
|
|
21
20
|
@connection = original_connection
|
22
21
|
end
|
23
22
|
|
24
|
-
|
25
23
|
def shard_header(stream)
|
26
24
|
define_params = @version ? "version: #{@version}" : ""
|
27
25
|
|
@@ -34,11 +32,10 @@ ActiveRecord::Base.on_all_shards do
|
|
34
32
|
ActiveRecord::Schema.define(#{define_params}) do
|
35
33
|
|
36
34
|
HEADER
|
37
|
-
|
35
|
+
end
|
38
36
|
|
39
37
|
def shard_trailer(stream)
|
40
38
|
stream.puts "end\nend"
|
41
39
|
end
|
42
|
-
|
43
40
|
end
|
44
41
|
end
|
@@ -15,7 +15,7 @@ namespace :db do
|
|
15
15
|
# rescue ActiveRecord::NoDatabaseError # TODO: exists in AR but never is raised here ...
|
16
16
|
# $stderr.puts "Database '#{conf['database']}' does not exist"
|
17
17
|
rescue Exception => error
|
18
|
-
$stderr.puts error, *
|
18
|
+
$stderr.puts error, *error.backtrace
|
19
19
|
$stderr.puts "Couldn't drop #{conf['database']}"
|
20
20
|
end
|
21
21
|
end
|
@@ -68,7 +68,7 @@ namespace :db do
|
|
68
68
|
pending_migrations.each do |pending_migration|
|
69
69
|
puts ' %4d %s' % [pending_migration.version, pending_migration.name]
|
70
70
|
end
|
71
|
-
abort %
|
71
|
+
abort %(Run "rake db:migrate" to update your database then try again.)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
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.7.
|
4
|
+
version: 3.7.1
|
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: 2016-08-
|
13
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.42.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.42.0
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: minitest
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
228
|
version: '0'
|
215
229
|
requirements: []
|
216
230
|
rubyforge_project:
|
217
|
-
rubygems_version: 2.
|
231
|
+
rubygems_version: 2.5.1
|
218
232
|
signing_key:
|
219
233
|
specification_version: 4
|
220
234
|
summary: Simple database switching for ActiveRecord.
|