fresh_connection 3.0.3 → 3.1.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/.gitignore +1 -0
- data/.travis.yml +9 -13
- data/Appraisals +5 -17
- data/README.md +6 -4
- data/Rakefile +6 -13
- data/bin/setup +2 -1
- data/bin/test +19 -12
- data/fresh_connection.gemspec +3 -8
- data/gemfiles/rails52.gemfile +0 -2
- data/gemfiles/rails60.gemfile +7 -0
- data/lib/fresh_connection.rb +0 -4
- data/lib/fresh_connection/connection_specification.rb +7 -2
- data/lib/fresh_connection/extend.rb +4 -0
- data/lib/fresh_connection/extend/ar_statement_cache.rb +2 -8
- data/lib/fresh_connection/version.rb +1 -1
- metadata +13 -75
- data/gemfiles/rails50.gemfile +0 -10
- data/gemfiles/rails51.gemfile +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d21ad20eb5180bd0bfd7c7e4ec352328e73f4be954215aa49ea7056442738490
|
4
|
+
data.tar.gz: 0f7acb28bd1c0fb738491036aa617e43ea0d994fef71d7151d0b977bbd9a28e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70d6f0fbb318ac1687e2ac2fe915c213fd25403f2938aa43037c0aa9bc618a29eaeb0806638390778b364ab7b8dde3488bd5f380cd31fd3ce68a04005793ddd8
|
7
|
+
data.tar.gz: 820751f83fb8f143c700ad6073a72ee2d7427a9e907984c7afe7ed970d90bee40d913550c5f95ce3baff6e1fc3efd3388d6ff93d49039fda7ff206cc0fa84f1c
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -2,22 +2,18 @@ language: ruby
|
|
2
2
|
services:
|
3
3
|
- mysql
|
4
4
|
- postgresql
|
5
|
-
|
6
|
-
-
|
7
|
-
-
|
8
|
-
- psql -c 'create database fresh_connection_test_master;' -U postgres
|
9
|
-
- psql -c 'create database fresh_connection_test_replica1;' -U postgres
|
10
|
-
- psql -c 'create database fresh_connection_test_replica2;' -U postgres
|
11
|
-
cache: bundler
|
5
|
+
before_install:
|
6
|
+
- gem update --system
|
7
|
+
- gem --version
|
12
8
|
rvm:
|
13
|
-
- 2.
|
14
|
-
- 2.
|
15
|
-
- 2.
|
16
|
-
- 2.6.0
|
9
|
+
- 2.5.8
|
10
|
+
- 2.6.6
|
11
|
+
- 2.7.1
|
17
12
|
gemfile:
|
18
|
-
- gemfiles/rails50.gemfile
|
19
|
-
- gemfiles/rails51.gemfile
|
20
13
|
- gemfiles/rails52.gemfile
|
14
|
+
- gemfiles/rails60.gemfile
|
15
|
+
script:
|
16
|
+
- "bin/test"
|
21
17
|
matrix:
|
22
18
|
fast_finish: true
|
23
19
|
bundler_args: --jobs 3 --retry 3
|
data/Appraisals
CHANGED
@@ -1,20 +1,8 @@
|
|
1
|
-
appraise "rails50" do
|
2
|
-
gem 'activerecord', '~> 5.0.0'
|
3
|
-
gem 'activesupport', '~> 5.0.0'
|
4
|
-
gem 'mysql2', '>= 0.3.18', '< 0.6.0'
|
5
|
-
gem 'pg', '>= 0.18', '< 2.0'
|
6
|
-
end
|
7
|
-
|
8
|
-
appraise "rails51" do
|
9
|
-
gem 'activerecord', '~> 5.1.0'
|
10
|
-
gem 'activesupport', '~> 5.1.0'
|
11
|
-
gem 'mysql2', '>= 0.3.18', '< 0.6.0'
|
12
|
-
gem 'pg', '>= 0.18', '< 2.0'
|
13
|
-
end
|
14
|
-
|
15
1
|
appraise "rails52" do
|
16
2
|
gem 'activerecord', '~> 5.2.0'
|
17
|
-
gem '
|
18
|
-
|
19
|
-
|
3
|
+
gem 'mysql2', '>= 0.4.4', "< 0.6.0"
|
4
|
+
end
|
5
|
+
|
6
|
+
appraise "rails60" do
|
7
|
+
gem 'activerecord', '~> 6.0.0'
|
20
8
|
end
|
data/README.md
CHANGED
@@ -29,8 +29,6 @@ FreshConnction connects one or more configured DB replicas, or with multiple rep
|
|
29
29
|
- Write queries go to the DB master.
|
30
30
|
- Within a transaction, all queries go to the DB master.
|
31
31
|
|
32
|
-
If you wish to use multiple DB replicas on any given connection but do not have a load balancer (such as [`pgbouncer`](https://pgbouncer.github.io) for Posgres databases), you can use [EbisuConnection](https://github.com/tsukasaoishi/ebisu_connection).
|
33
|
-
|
34
32
|
### Failover
|
35
33
|
FreshConnection assumes that there is a load balancer in front of multi replica servers.
|
36
34
|
When what happens one of the replicas is unreachable for any reason, FreshConnection will try three retries to access to a replica via a load balancer.
|
@@ -80,8 +78,12 @@ old_article.destroy
|
|
80
78
|
|
81
79
|
## ActiveRecord Versions Supported
|
82
80
|
|
83
|
-
- FreshConnection supports ActiveRecord version 5.
|
84
|
-
- If you are using Rails
|
81
|
+
- FreshConnection supports ActiveRecord version 5.2 or later.
|
82
|
+
- If you are using Rails 5.1, you can use FreshConnection version 3.0.3 or before.
|
83
|
+
|
84
|
+
### Not Support Multiple Database
|
85
|
+
I haven't tested it in an environment using MultipleDB in Rails 6.
|
86
|
+
I plan to enable use with MultipleDB in FreshConnection version 4.0 or later.
|
85
87
|
|
86
88
|
## Databases Supported
|
87
89
|
FreshConnection currently supports MySQL and PostgreSQL.
|
data/Rakefile
CHANGED
@@ -1,20 +1,13 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require 'rake/testtask'
|
3
3
|
|
4
|
-
desc 'Run
|
4
|
+
desc 'Run tests'
|
5
5
|
task :test do
|
6
|
-
Rake::
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
%w(mysql2 postgresql).each do |test_name|
|
12
|
-
Rake::TestTask.new(test_name) do |t|
|
13
|
-
t.libs << "test"
|
14
|
-
t.libs << "lib"
|
15
|
-
t.test_files = FileList["test/config/prepare_#{test_name}", 'test/**/*_test.rb']
|
16
|
-
t.verbose = true
|
17
|
-
end
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.libs << "test"
|
8
|
+
t.libs << "lib"
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
|
+
t.verbose = true
|
18
11
|
end
|
19
12
|
end
|
20
13
|
|
data/bin/setup
CHANGED
data/bin/test
CHANGED
@@ -2,16 +2,23 @@
|
|
2
2
|
set -euo pipefail
|
3
3
|
IFS=$'\n\t'
|
4
4
|
|
5
|
-
for dbname in fresh_connection_test_master fresh_connection_test_replica1 fresh_connection_test_replica2 ; do
|
6
|
-
if ! psql $dbname -c '\q' 2>/dev/null ; then
|
7
|
-
if [[ -n "`psql -l | grep \"$dbname\"`" ]]; then
|
8
|
-
echo "Dropping database $dbname .."
|
9
|
-
dropdb $dbname
|
10
|
-
fi
|
11
|
-
echo "Creating database $dbname .."
|
12
|
-
createdb $dbname
|
13
|
-
fi
|
14
|
-
done
|
15
|
-
|
16
5
|
set -vx
|
17
|
-
|
6
|
+
|
7
|
+
if [ -v DATABASE_URL ]; then
|
8
|
+
echo "[specified config]"
|
9
|
+
bundle exec rake test
|
10
|
+
else
|
11
|
+
echo "[mysql]"
|
12
|
+
DATABASE_URL="mysql2://root@localhost/fresh_connection_test_master" \
|
13
|
+
DATABASE_REPLICA1_URL="mysql2://root@localhost/fresh_connection_test_replica1" \
|
14
|
+
DATABASE_REPLICA2_URL="mysql2://root@localhost/fresh_connection_test_replica2" \
|
15
|
+
DATABASE_FAKE_REPLICA_URL="mysql2://root@localhost/fresh_connection_test_master" \
|
16
|
+
bundle exec rake test
|
17
|
+
|
18
|
+
echo "[postgresql]"
|
19
|
+
DATABASE_URL="postgresql://localhost/fresh_connection_test_master" \
|
20
|
+
DATABASE_REPLICA1_URL="postgresql://localhost/fresh_connection_test_replica1" \
|
21
|
+
DATABASE_REPLICA2_URL="postgresql://localhost/fresh_connection_test_replica2" \
|
22
|
+
DATABASE_FAKE_REPLICA_URL="postgresql://localhost/fresh_connection_test_master" \
|
23
|
+
bundle exec rake test
|
24
|
+
fi
|
data/fresh_connection.gemspec
CHANGED
@@ -19,16 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.
|
22
|
+
spec.add_dependency 'activerecord', '>= 5.2.0', '< 6.1'
|
23
23
|
|
24
|
-
spec.
|
25
|
-
spec.add_dependency 'activesupport', '>= 5.0.0', '< 5.3'
|
26
|
-
spec.add_dependency 'concurrent-ruby', '~> 1.0'
|
27
|
-
|
28
|
-
spec.add_development_dependency 'mysql2', '>= 0.3.18', '< 0.6.0'
|
24
|
+
spec.add_development_dependency 'mysql2', '>= 0.4.4'
|
29
25
|
spec.add_development_dependency 'pg', '>= 0.18', '< 2.0'
|
30
|
-
spec.add_development_dependency "
|
31
|
-
spec.add_development_dependency "rake", ">= 0.8.7"
|
26
|
+
spec.add_development_dependency "rake"
|
32
27
|
spec.add_development_dependency 'appraisal'
|
33
28
|
spec.add_development_dependency "minitest", "~> 5.10.0"
|
34
29
|
spec.add_development_dependency "minitest-reporters"
|
data/gemfiles/rails52.gemfile
CHANGED
data/lib/fresh_connection.rb
CHANGED
@@ -16,7 +16,7 @@ module FreshConnection
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def resolver
|
19
|
-
ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
19
|
+
ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(build_config)
|
20
20
|
end
|
21
21
|
|
22
22
|
def build_config
|
@@ -26,7 +26,12 @@ module FreshConnection
|
|
26
26
|
config = config.merge(s_config) if s_config
|
27
27
|
|
28
28
|
config = config.merge(@modify_spec) if defined?(@modify_spec)
|
29
|
-
|
29
|
+
|
30
|
+
if defined?(ActiveRecord::DatabaseConfigurations)
|
31
|
+
ActiveRecord::DatabaseConfigurations.new(@spec_name => config)
|
32
|
+
else
|
33
|
+
{ @spec_name => config }
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
def replica_config(config)
|
@@ -2,6 +2,10 @@
|
|
2
2
|
require 'active_support'
|
3
3
|
|
4
4
|
ActiveSupport.on_load(:active_record) do
|
5
|
+
if respond_to?(:connection_handlers) && connection_handlers.empty?
|
6
|
+
self.connection_handlers = { writing_role => ActiveRecord::Base.default_connection_handler }
|
7
|
+
end
|
8
|
+
|
5
9
|
require 'fresh_connection/extend/ar_base'
|
6
10
|
require 'fresh_connection/extend/ar_relation'
|
7
11
|
require 'fresh_connection/extend/ar_relation_merger'
|
@@ -3,14 +3,8 @@
|
|
3
3
|
module FreshConnection
|
4
4
|
module Extend
|
5
5
|
module ArStatementCache
|
6
|
-
|
7
|
-
|
8
|
-
klass.all.manage_access { super }
|
9
|
-
end
|
10
|
-
else
|
11
|
-
def execute(params, klass, connection, &block)
|
12
|
-
klass.all.manage_access { super }
|
13
|
-
end
|
6
|
+
def execute(params, connection, &block)
|
7
|
+
klass.all.manage_access { super }
|
14
8
|
end
|
15
9
|
end
|
16
10
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fresh_connection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsukasa OISHI
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,74 +16,34 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.
|
19
|
+
version: 5.2.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '6.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 5.
|
29
|
+
version: 5.2.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: activesupport
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 5.0.0
|
40
|
-
- - "<"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '5.3'
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 5.0.0
|
50
|
-
- - "<"
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: '5.3'
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: concurrent-ruby
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.0'
|
60
|
-
type: :runtime
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '1.0'
|
32
|
+
version: '6.1'
|
67
33
|
- !ruby/object:Gem::Dependency
|
68
34
|
name: mysql2
|
69
35
|
requirement: !ruby/object:Gem::Requirement
|
70
36
|
requirements:
|
71
37
|
- - ">="
|
72
38
|
- !ruby/object:Gem::Version
|
73
|
-
version: 0.
|
74
|
-
- - "<"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 0.6.0
|
39
|
+
version: 0.4.4
|
77
40
|
type: :development
|
78
41
|
prerelease: false
|
79
42
|
version_requirements: !ruby/object:Gem::Requirement
|
80
43
|
requirements:
|
81
44
|
- - ">="
|
82
45
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0.
|
84
|
-
- - "<"
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 0.6.0
|
46
|
+
version: 0.4.4
|
87
47
|
- !ruby/object:Gem::Dependency
|
88
48
|
name: pg
|
89
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,40 +64,20 @@ dependencies:
|
|
104
64
|
- - "<"
|
105
65
|
- !ruby/object:Gem::Version
|
106
66
|
version: '2.0'
|
107
|
-
- !ruby/object:Gem::Dependency
|
108
|
-
name: bundler
|
109
|
-
requirement: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 1.3.0
|
114
|
-
- - "<"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '2.0'
|
117
|
-
type: :development
|
118
|
-
prerelease: false
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - ">="
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: 1.3.0
|
124
|
-
- - "<"
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '2.0'
|
127
67
|
- !ruby/object:Gem::Dependency
|
128
68
|
name: rake
|
129
69
|
requirement: !ruby/object:Gem::Requirement
|
130
70
|
requirements:
|
131
71
|
- - ">="
|
132
72
|
- !ruby/object:Gem::Version
|
133
|
-
version: 0
|
73
|
+
version: '0'
|
134
74
|
type: :development
|
135
75
|
prerelease: false
|
136
76
|
version_requirements: !ruby/object:Gem::Requirement
|
137
77
|
requirements:
|
138
78
|
- - ">="
|
139
79
|
- !ruby/object:Gem::Version
|
140
|
-
version: 0
|
80
|
+
version: '0'
|
141
81
|
- !ruby/object:Gem::Dependency
|
142
82
|
name: appraisal
|
143
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,9 +154,8 @@ files:
|
|
214
154
|
- bin/setup
|
215
155
|
- bin/test
|
216
156
|
- fresh_connection.gemspec
|
217
|
-
- gemfiles/rails50.gemfile
|
218
|
-
- gemfiles/rails51.gemfile
|
219
157
|
- gemfiles/rails52.gemfile
|
158
|
+
- gemfiles/rails60.gemfile
|
220
159
|
- lib/fresh_connection.rb
|
221
160
|
- lib/fresh_connection/abstract_connection_manager.rb
|
222
161
|
- lib/fresh_connection/access_control.rb
|
@@ -248,15 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
248
187
|
requirements:
|
249
188
|
- - ">="
|
250
189
|
- !ruby/object:Gem::Version
|
251
|
-
version: '
|
190
|
+
version: '0'
|
252
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
253
192
|
requirements:
|
254
193
|
- - ">="
|
255
194
|
- !ruby/object:Gem::Version
|
256
195
|
version: '0'
|
257
196
|
requirements: []
|
258
|
-
|
259
|
-
rubygems_version: 2.7.6
|
197
|
+
rubygems_version: 3.1.2
|
260
198
|
signing_key:
|
261
199
|
specification_version: 4
|
262
200
|
summary: FreshConnection supports connections with configured replica servers.
|
data/gemfiles/rails50.gemfile
DELETED
data/gemfiles/rails51.gemfile
DELETED