fresh_connection 0.2.1 → 0.2.2
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/Appraisals +3 -3
- data/README.md +16 -8
- data/fresh_connection.gemspec +7 -8
- data/gemfiles/rails3.gemfile +1 -1
- data/gemfiles/rails40.gemfile +1 -1
- data/gemfiles/rails41.gemfile +1 -1
- data/lib/fresh_connection/connection_manager.rb +1 -1
- data/lib/fresh_connection/initializer.rb +0 -8
- data/lib/fresh_connection/railtie.rb +9 -2
- data/lib/fresh_connection/version.rb +1 -1
- data/lib/fresh_connection.rb +17 -5
- data/spec/prepare.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/access_control_spec.rb +2 -2
- data/spec/unit/ar_base_spec.rb +3 -3
- data/spec/unit/fresh_connection_spec.rb +3 -3
- metadata +34 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2999ecd43189e483dd9e76457c90598f3056977c
|
4
|
+
data.tar.gz: 2cf79d1a5a80c898bc45154f41c8f6bbc8ab58e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7410aef62e7d1d41a51c0d47574ac053d7662a88d56ab6660396743929df8ed63baedb760f7954935b07313a5f500833e509d54336136bdd7868a51622bc2f0b
|
7
|
+
data.tar.gz: abe0ef9651146312f7513f8a6ae49bb6ebde58df48077699396cad5a46ccc86480219671ec34595edeb41d62d9cf1153408b98169502db2672691a3cd7008747
|
data/Appraisals
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
appraise "rails3" do
|
2
2
|
gem "activerecord", "~> 3.2.0"
|
3
3
|
gem "activesupport", "~> 3.2.0"
|
4
|
-
gem "
|
4
|
+
gem "mysql2", "~> 0.3"
|
5
5
|
end
|
6
6
|
|
7
7
|
appraise "rails40" do
|
8
8
|
gem "activerecord", "~> 4.0.0"
|
9
9
|
gem "activesupport", "~> 4.0.0"
|
10
|
-
gem "
|
10
|
+
gem "mysql2", "~> 0.3"
|
11
11
|
end
|
12
12
|
|
13
13
|
appraise "rails41" do
|
14
14
|
gem "activerecord", "~> 4.1.0"
|
15
15
|
gem "activesupport", "~> 4.1.0"
|
16
|
-
gem "
|
16
|
+
gem "mysql2", "~> 0.3"
|
17
17
|
end
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# FreshConnection
|
2
2
|
|
3
3
|
FreshConnection supports to connect with Mysql slave servers via Load Balancers.
|
4
|
-
All connections will be disconnected every time at the end of the action.
|
4
|
+
All connections will be disconnected every time at the end of the Rails controller's action.
|
5
|
+
FreshConnection does not support Rails 2.x.
|
5
6
|
|
6
7
|
## Installation
|
7
8
|
|
8
|
-
### For Rails3 and 4
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
gem "fresh_connection"
|
@@ -38,11 +38,11 @@ Or install it yourself as:
|
|
38
38
|
password: slave
|
39
39
|
host: slave
|
40
40
|
|
41
|
-
```slave``` is config to connect to slave servers.
|
42
|
-
Others will use the master setting.
|
41
|
+
```slave``` is a config to connect to slave servers.
|
42
|
+
Others will use the master server setting.
|
43
43
|
|
44
44
|
### use multiple slave servers group
|
45
|
-
If you may want to
|
45
|
+
If you may want to use multiple slave groups, write the config to ```config/database.yml```.
|
46
46
|
|
47
47
|
production:
|
48
48
|
adapter: mysql2
|
@@ -65,13 +65,13 @@ If you may want to user multiple slave group, write multiple slave group to conf
|
|
65
65
|
password: slave
|
66
66
|
host: admin_slaves
|
67
67
|
|
68
|
-
And call establish_fresh_connection method in model that access to ```admin_slave``` slave group.
|
68
|
+
And call the establish_fresh_connection method in a model that access to ```admin_slave``` slave group.
|
69
69
|
|
70
70
|
class AdminUser < ActiveRecord::Base
|
71
71
|
establish_fresh_connection :admin_slave
|
72
72
|
end
|
73
73
|
|
74
|
-
The children
|
74
|
+
The model of children class will access to same slave group as the parent.
|
75
75
|
|
76
76
|
class Parent < ActiveRecord::Base
|
77
77
|
establish_fresh_connection :admin_slave
|
@@ -92,13 +92,19 @@ AdminUser and Benefit access to ```admin_slave``` slave group.
|
|
92
92
|
master_db_only!
|
93
93
|
end
|
94
94
|
|
95
|
-
If model that always access to master
|
95
|
+
If a model that always access to the master server is exist, You write ```master_db_only!``` in the model.
|
96
96
|
The model that master_db_only model's child is always access to master db.
|
97
97
|
|
98
98
|
### Slave Connection Manager
|
99
99
|
Default slave connection manager is FreshConnection::ConnectionManager.
|
100
100
|
If you would like to change slave connection manager, assign yourself slave connection manager.
|
101
101
|
|
102
|
+
#### config/application.rb
|
103
|
+
|
104
|
+
config.fresh_connection.connection_manager = MySlaveConnection
|
105
|
+
|
106
|
+
or
|
107
|
+
|
102
108
|
#### config/initializers/fresh_connection.rb
|
103
109
|
|
104
110
|
FreshConnection.connection_manager = MySlaveConnection
|
@@ -151,6 +157,8 @@ I'm glad that you would do test!
|
|
151
157
|
To run the test suite, you need mysql installed.
|
152
158
|
How to setup your test environment.
|
153
159
|
|
160
|
+
First of all, you setting the config of the test mysql server in ```spec/database.yml```
|
161
|
+
|
154
162
|
```bash
|
155
163
|
bundle install --path bundle
|
156
164
|
GEM_HOME=bundle/ruby/(your ruby version) gem install bundler --pre
|
data/fresh_connection.gemspec
CHANGED
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'activerecord', '>= 3.2.0'
|
22
|
-
spec.add_dependency 'activesupport', '>= 3.2.0'
|
23
|
-
spec.add_dependency '
|
21
|
+
spec.add_dependency 'activerecord', '>= 3.2.0', '< 4.2'
|
22
|
+
spec.add_dependency 'activesupport', '>= 3.2.0', '< 4.2'
|
23
|
+
spec.add_dependency 'mysql2', '~> 0.3'
|
24
24
|
|
25
|
-
spec.add_development_dependency "bundler", "~> 1.
|
26
|
-
spec.add_development_dependency "rake", '
|
27
|
-
spec.add_development_dependency "rspec", '
|
28
|
-
spec.add_development_dependency '
|
29
|
-
spec.add_development_dependency 'appraisal', '>= 1.0.0'
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
26
|
+
spec.add_development_dependency "rake", '~> 10.0'
|
27
|
+
spec.add_development_dependency "rspec", '~> 2.14'
|
28
|
+
spec.add_development_dependency 'appraisal', '~> 1.0'
|
30
29
|
end
|
data/gemfiles/rails3.gemfile
CHANGED
data/gemfiles/rails40.gemfile
CHANGED
data/gemfiles/rails41.gemfile
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'fresh_connection/rack/connection_management'
|
2
1
|
require 'fresh_connection/extend/ar_base'
|
3
2
|
require 'fresh_connection/extend/ar_relation'
|
4
3
|
require 'fresh_connection/extend/connection_handler'
|
@@ -7,13 +6,6 @@ require 'fresh_connection/extend/mysql2_adapter'
|
|
7
6
|
module FreshConnection
|
8
7
|
class Initializer
|
9
8
|
class << self
|
10
|
-
def swap_rack(app)
|
11
|
-
app.config.middleware.swap(
|
12
|
-
ActiveRecord::ConnectionAdapters::ConnectionManagement,
|
13
|
-
FreshConnection::Rack::ConnectionManagement
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
9
|
def extend_active_record
|
18
10
|
ActiveRecord::Base.extend FreshConnection::Extend::ArBase
|
19
11
|
|
@@ -1,11 +1,18 @@
|
|
1
|
+
require 'fresh_connection/rack/connection_management'
|
1
2
|
require 'rails'
|
2
3
|
|
3
4
|
module FreshConnection
|
4
5
|
class Railtie < Rails::Railtie
|
5
|
-
|
6
|
-
|
6
|
+
config.fresh_connection = ActiveSupport::OrderedOptions.new
|
7
|
+
config.eager_load_namespaces << FreshConnection
|
7
8
|
|
9
|
+
initializer "fresh_connection.configure_rails_initialization" do |app|
|
8
10
|
ActiveSupport.on_load(:active_record) do
|
11
|
+
app.config.app_middleware.swap(
|
12
|
+
ActiveRecord::ConnectionAdapters::ConnectionManagement,
|
13
|
+
FreshConnection::Rack::ConnectionManagement
|
14
|
+
)
|
15
|
+
|
9
16
|
Initializer.extend_active_record
|
10
17
|
end
|
11
18
|
end
|
data/lib/fresh_connection.rb
CHANGED
@@ -12,18 +12,23 @@ module FreshConnection
|
|
12
12
|
autoload :SlaveConnection
|
13
13
|
|
14
14
|
class << self
|
15
|
-
attr_writer :connection_manager, :ignore_configure_connection, :retry_limit
|
15
|
+
attr_writer :connection_manager, :ignore_configure_connection, :retry_limit, :env
|
16
16
|
|
17
17
|
def connection_manager
|
18
|
-
@connection_manager || ConnectionManager
|
18
|
+
manager_klass = @connection_manager || rails_config(:connection_manager) || ConnectionManager
|
19
|
+
manager_klass.is_a?(String) ? manager_klass.constantize : manager_klass
|
19
20
|
end
|
20
21
|
|
21
22
|
def ignore_configure_connection?
|
22
|
-
|
23
|
+
!!(@ignore_configure_connection || rails_config(:ignore_configure_connection))
|
23
24
|
end
|
24
25
|
|
25
26
|
def retry_limit
|
26
|
-
@retry_limit || 3
|
27
|
+
@retry_limit || rails_config(:retry_limit) || 3
|
28
|
+
end
|
29
|
+
|
30
|
+
def env
|
31
|
+
@env || defined?(Rails) && Rails.env
|
27
32
|
end
|
28
33
|
|
29
34
|
def rails_3?
|
@@ -33,7 +38,14 @@ module FreshConnection
|
|
33
38
|
def rails_4?
|
34
39
|
ActiveRecord::VERSION::MAJOR == 4
|
35
40
|
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def rails_config(target)
|
45
|
+
return nil unless defined?(Rails)
|
46
|
+
Rails.application.config.fresh_connection[target]
|
47
|
+
end
|
36
48
|
end
|
37
49
|
end
|
38
50
|
|
39
|
-
require "fresh_connection/railtie.rb"
|
51
|
+
require "fresh_connection/railtie.rb" if defined?(Rails)
|
data/spec/prepare.rb
CHANGED
@@ -5,7 +5,7 @@ system("mysql -uroot < spec/db_schema.sql")
|
|
5
5
|
module ActiveRecord
|
6
6
|
class Base
|
7
7
|
self.configurations = YAML.load_file(File.join(File.dirname(__FILE__), "database.yml"))
|
8
|
-
establish_connection
|
8
|
+
establish_connection(configurations["test"])
|
9
9
|
establish_fresh_connection :slave1
|
10
10
|
end
|
11
11
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,7 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
3
3
|
require 'fresh_connection'
|
4
4
|
|
5
5
|
FreshConnection::Initializer.extend_active_record
|
6
|
+
FreshConnection.env = "test"
|
6
7
|
require File.join(File.dirname(__FILE__), "prepare.rb")
|
7
8
|
|
8
9
|
Dir[File.join(File.dirname(__FILE__), "/support/**/*.rb")].each {|f| require f}
|
@@ -48,7 +48,7 @@ describe FreshConnection::AccessControl do
|
|
48
48
|
it "forced master state" do
|
49
49
|
@ac.access(true) do
|
50
50
|
@ac.force_master_access do
|
51
|
-
expect(@ac.slave_access?).to
|
51
|
+
expect(@ac.slave_access?).to be_falsey
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -56,7 +56,7 @@ describe FreshConnection::AccessControl do
|
|
56
56
|
it "not effect outside" do
|
57
57
|
@ac.access(true) do
|
58
58
|
@ac.force_master_access {}
|
59
|
-
expect(@ac.slave_access?).to
|
59
|
+
expect(@ac.slave_access?).to be_truthy
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
data/spec/unit/ar_base_spec.rb
CHANGED
@@ -29,14 +29,14 @@ describe ActiveRecord::Base do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "childrend of master_db_only class is master_db_only" do
|
32
|
-
expect(User2.master_db_only?).to
|
32
|
+
expect(User2.master_db_only?).to be_falsey
|
33
33
|
Parent.master_db_only!
|
34
|
-
expect(User2.master_db_only?).to
|
34
|
+
expect(User2.master_db_only?).to be_truthy
|
35
35
|
end
|
36
36
|
|
37
37
|
it "not effect other class" do
|
38
38
|
Parent.master_db_only!
|
39
|
-
expect(Address.master_db_only?).to
|
39
|
+
expect(Address.master_db_only?).to be_falsey
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -12,7 +12,7 @@ describe FreshConnection do
|
|
12
12
|
Address.first.user.name,
|
13
13
|
Tel.first.user.name,
|
14
14
|
]
|
15
|
-
|
15
|
+
|
16
16
|
expect(data).to be_all{|n| n.include?("slave1")}
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ describe FreshConnection do
|
|
21
21
|
Address.first.prefecture,
|
22
22
|
@user.address.prefecture
|
23
23
|
]
|
24
|
-
|
24
|
+
|
25
25
|
expect(data).to be_all{|n| n.include?("slave1")}
|
26
26
|
end
|
27
27
|
|
@@ -30,7 +30,7 @@ describe FreshConnection do
|
|
30
30
|
Tel.first.number,
|
31
31
|
@user.tels.first.number
|
32
32
|
]
|
33
|
-
|
33
|
+
|
34
34
|
expect(data).to be_all{|n| n.include?("slave2")}
|
35
35
|
end
|
36
36
|
|
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: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsukasa OISHI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-11 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.2.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.2'
|
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.2.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4.2'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: activesupport
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,6 +37,9 @@ dependencies:
|
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
39
|
version: 3.2.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '4.2'
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,90 +47,79 @@ dependencies:
|
|
38
47
|
- - ">="
|
39
48
|
- !ruby/object:Gem::Version
|
40
49
|
version: 3.2.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '4.2'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
54
|
+
name: mysql2
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
|
-
- - "
|
57
|
+
- - "~>"
|
46
58
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3
|
59
|
+
version: '0.3'
|
48
60
|
type: :runtime
|
49
61
|
prerelease: false
|
50
62
|
version_requirements: !ruby/object:Gem::Requirement
|
51
63
|
requirements:
|
52
|
-
- - "
|
64
|
+
- - "~>"
|
53
65
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3
|
66
|
+
version: '0.3'
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: bundler
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
58
70
|
requirements:
|
59
71
|
- - "~>"
|
60
72
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
73
|
+
version: '1.6'
|
62
74
|
type: :development
|
63
75
|
prerelease: false
|
64
76
|
version_requirements: !ruby/object:Gem::Requirement
|
65
77
|
requirements:
|
66
78
|
- - "~>"
|
67
79
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
80
|
+
version: '1.6'
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
82
|
name: rake
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
|
-
- - "
|
85
|
+
- - "~>"
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: 10.0
|
87
|
+
version: '10.0'
|
76
88
|
type: :development
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
|
-
- - "
|
92
|
+
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: 10.0
|
94
|
+
version: '10.0'
|
83
95
|
- !ruby/object:Gem::Dependency
|
84
96
|
name: rspec
|
85
97
|
requirement: !ruby/object:Gem::Requirement
|
86
98
|
requirements:
|
87
|
-
- - "
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 2.14.1
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 2.14.1
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: mysql2
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
99
|
+
- - "~>"
|
102
100
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
101
|
+
version: '2.14'
|
104
102
|
type: :development
|
105
103
|
prerelease: false
|
106
104
|
version_requirements: !ruby/object:Gem::Requirement
|
107
105
|
requirements:
|
108
|
-
- - "
|
106
|
+
- - "~>"
|
109
107
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
108
|
+
version: '2.14'
|
111
109
|
- !ruby/object:Gem::Dependency
|
112
110
|
name: appraisal
|
113
111
|
requirement: !ruby/object:Gem::Requirement
|
114
112
|
requirements:
|
115
|
-
- - "
|
113
|
+
- - "~>"
|
116
114
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.0
|
115
|
+
version: '1.0'
|
118
116
|
type: :development
|
119
117
|
prerelease: false
|
120
118
|
version_requirements: !ruby/object:Gem::Requirement
|
121
119
|
requirements:
|
122
|
-
- - "
|
120
|
+
- - "~>"
|
123
121
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1.0
|
122
|
+
version: '1.0'
|
125
123
|
description: https://github.com/tsukasaoishi/fresh_connection
|
126
124
|
email:
|
127
125
|
- tsukasa.oishi@gmail.com
|
@@ -183,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
181
|
version: '0'
|
184
182
|
requirements: []
|
185
183
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.2.
|
184
|
+
rubygems_version: 2.2.2
|
187
185
|
signing_key:
|
188
186
|
specification_version: 4
|
189
187
|
summary: FreshConnection supports to connect with Mysql slave servers via Load Balancers.
|