fresh_connection 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/README.md +87 -67
- data/Rakefile +7 -3
- data/fresh_connection.gemspec +3 -2
- data/lib/fresh_connection/extend/ar_base.rb +4 -0
- data/lib/fresh_connection/extend/ar_relation.rb +4 -0
- data/lib/fresh_connection/version.rb +1 -1
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10888efb25fd374b6b5d64d1a8c414ffdc9ae179
|
4
|
+
data.tar.gz: 35412910638fd33b2000190a7a92d647916a0403
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bafc8b2f529f0452c1df3dc1954b93ca242dcc11d1328bd905b9a6621d6e4ce664d38667afae0ff532a107bbbba522b54f9576d9dddd4edd4a6a7d61b00aef89
|
7
|
+
data.tar.gz: c2ca3ca877878a874384c33df520fec72b1451eed1982c43ab69428ff04b28ec3171763e402d57fe8f973ad2603be19dfb13db4af5ac1a6cd4cf0ea713cc4657
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -61,35 +61,43 @@ article.destory
|
|
61
61
|
|
62
62
|
Add this line to your application's Gemfile:
|
63
63
|
|
64
|
-
|
64
|
+
```ruby
|
65
|
+
gem "fresh_connection"
|
66
|
+
```
|
65
67
|
|
66
68
|
And then execute:
|
67
69
|
|
68
|
-
|
70
|
+
```
|
71
|
+
$ bundle
|
72
|
+
```
|
69
73
|
|
70
74
|
Or install it yourself as:
|
71
75
|
|
72
|
-
|
76
|
+
```
|
77
|
+
$ gem install fresh_connection
|
78
|
+
```
|
73
79
|
|
74
80
|
|
75
81
|
## Config
|
76
82
|
### config/database.yml
|
77
83
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
84
|
+
```yaml
|
85
|
+
production:
|
86
|
+
adapter: mysql2
|
87
|
+
encoding: utf8
|
88
|
+
reconnect: true
|
89
|
+
database: kaeru
|
90
|
+
pool: 5
|
91
|
+
username: master
|
92
|
+
password: master
|
93
|
+
host: localhost
|
94
|
+
socket: /var/run/mysqld/mysqld.sock
|
95
|
+
|
96
|
+
slave:
|
97
|
+
username: slave
|
98
|
+
password: slave
|
99
|
+
host: slave
|
100
|
+
```
|
93
101
|
|
94
102
|
```slave``` is a config to connect to slave servers.
|
95
103
|
Others will use the master server setting.
|
@@ -97,53 +105,61 @@ Others will use the master server setting.
|
|
97
105
|
### use multiple slave servers group
|
98
106
|
If you may want to use multiple slave groups, write the config to ```config/database.yml```.
|
99
107
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
108
|
+
```yaml
|
109
|
+
production:
|
110
|
+
adapter: mysql2
|
111
|
+
encoding: utf8
|
112
|
+
reconnect: true
|
113
|
+
database: kaeru
|
114
|
+
pool: 5
|
115
|
+
username: master
|
116
|
+
password: master
|
117
|
+
host: localhost
|
118
|
+
socket: /var/run/mysqld/mysqld.sock
|
119
|
+
|
120
|
+
slave:
|
121
|
+
username: slave
|
122
|
+
password: slave
|
123
|
+
host: slave
|
124
|
+
|
125
|
+
admin_slave:
|
126
|
+
username: slave
|
127
|
+
password: slave
|
128
|
+
host: admin_slaves
|
129
|
+
```
|
120
130
|
|
121
131
|
And call the establish_fresh_connection method in a model that access to ```admin_slave``` slave group.
|
122
132
|
|
123
|
-
|
124
|
-
|
125
|
-
|
133
|
+
```ruby
|
134
|
+
class AdminUser < ActiveRecord::Base
|
135
|
+
establish_fresh_connection :admin_slave
|
136
|
+
end
|
137
|
+
```
|
126
138
|
|
127
139
|
The model of children class will access to same slave group as the parent.
|
128
140
|
|
129
|
-
|
130
|
-
|
131
|
-
|
141
|
+
```ruby
|
142
|
+
class Parent < ActiveRecord::Base
|
143
|
+
establish_fresh_connection :admin_slave
|
144
|
+
end
|
132
145
|
|
133
|
-
|
134
|
-
|
146
|
+
class AdminUser < Parent
|
147
|
+
end
|
135
148
|
|
136
|
-
|
137
|
-
|
149
|
+
class Benefit < Parent
|
150
|
+
end
|
151
|
+
```
|
138
152
|
|
139
153
|
AdminUser and Benefit access to ```admin_slave``` slave group.
|
140
154
|
|
141
155
|
|
142
156
|
### Declare model that doesn't use slave db
|
143
157
|
|
144
|
-
|
145
|
-
|
146
|
-
|
158
|
+
```ruby
|
159
|
+
class SomethingModel < ActiveRecord::Base
|
160
|
+
master_db_only!
|
161
|
+
end
|
162
|
+
```
|
147
163
|
|
148
164
|
If a model that always access to the master server is exist, You write ```master_db_only!``` in the model.
|
149
165
|
The model that master_db_only model's child is always access to master db.
|
@@ -170,24 +186,28 @@ If you would like to change slave connection manager, assign yourself slave conn
|
|
170
186
|
|
171
187
|
#### config/initializers/fresh_connection.rb
|
172
188
|
|
173
|
-
|
189
|
+
```ruby
|
190
|
+
FreshConnection.connection_manager = MySlaveConnection
|
191
|
+
```
|
174
192
|
|
175
193
|
|
176
194
|
Yourself Slave Connection Manager should be inherited FreshConnection::AbstractConnectionManager
|
177
195
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
196
|
+
```ruby
|
197
|
+
class MySlaveConnection < FreshConnection::AbstractConnectionManager
|
198
|
+
def slave_connection
|
199
|
+
# must return object of ActiveRecord::ConnectionAdapters::Mysql2Adapter
|
200
|
+
end
|
201
|
+
|
202
|
+
def put_aside!
|
203
|
+
# called when end of Rails controller action
|
204
|
+
end
|
205
|
+
|
206
|
+
def recovery(failure_connection, exception)
|
207
|
+
# called when raise exception to access slave server
|
208
|
+
end
|
209
|
+
end
|
210
|
+
```
|
191
211
|
|
192
212
|
|
193
213
|
## Contributing
|
@@ -213,7 +233,7 @@ bundle exec appraisal install
|
|
213
233
|
|
214
234
|
This command run the spec suite for all rails versions supported.
|
215
235
|
|
216
|
-
```
|
217
|
-
bundle exec appraisal rake
|
236
|
+
```bash
|
237
|
+
bundle exec appraisal rake test
|
218
238
|
```
|
219
239
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
require
|
2
|
+
require 'rake/testtask'
|
3
3
|
|
4
|
-
|
4
|
+
Rake::TestTask.new do |t|
|
5
|
+
t.libs.push "test"
|
6
|
+
t.test_files = FileList['test/**/*_test.rb']
|
7
|
+
t.verbose = true
|
8
|
+
end
|
5
9
|
|
6
|
-
task :default => :
|
10
|
+
task :default => :test
|
data/fresh_connection.gemspec
CHANGED
@@ -22,10 +22,11 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.required_ruby_version = '>= 2.0'
|
23
23
|
spec.add_dependency 'activerecord', '>= 3.2.0', '< 4.3'
|
24
24
|
spec.add_dependency 'activesupport', '>= 3.2.0', '< 4.3'
|
25
|
-
spec.add_dependency 'mysql2', '~> 0.3'
|
25
|
+
spec.add_dependency 'mysql2', '~> 0.3.18'
|
26
26
|
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.7"
|
28
28
|
spec.add_development_dependency "rake", '~> 10.0'
|
29
|
-
spec.add_development_dependency "rspec", '~> 3.0'
|
30
29
|
spec.add_development_dependency 'appraisal', '~> 2.0'
|
30
|
+
spec.add_development_dependency "minitest"
|
31
|
+
spec.add_development_dependency "minitest-reporters"
|
31
32
|
end
|
@@ -17,6 +17,10 @@ module FreshConnection
|
|
17
17
|
@klass.manage_access(slave_access) { super }
|
18
18
|
end
|
19
19
|
|
20
|
+
def exists?(*args)
|
21
|
+
@klass.manage_access(enable_slave_access) { super }
|
22
|
+
end
|
23
|
+
|
20
24
|
def enable_slave_access
|
21
25
|
connection.open_transactions == 0 && @read_from_master.nil?
|
22
26
|
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: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsukasa OISHI
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
59
|
+
version: 0.3.18
|
60
60
|
type: :runtime
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: 0.3.18
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: bundler
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,33 +93,47 @@ dependencies:
|
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '10.0'
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
96
|
+
name: appraisal
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
99
|
- - "~>"
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '2.0'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
106
|
- - "~>"
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version: '
|
108
|
+
version: '2.0'
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
110
|
+
name: minitest
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
112
112
|
requirements:
|
113
|
-
- - "
|
113
|
+
- - ">="
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version: '
|
115
|
+
version: '0'
|
116
116
|
type: :development
|
117
117
|
prerelease: false
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
|
-
- - "
|
120
|
+
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
122
|
+
version: '0'
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: minitest-reporters
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
123
137
|
description: https://github.com/tsukasaoishi/fresh_connection
|
124
138
|
email:
|
125
139
|
- tsukasa.oishi@gmail.com
|
@@ -177,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
191
|
version: '0'
|
178
192
|
requirements: []
|
179
193
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.4.5
|
194
|
+
rubygems_version: 2.4.5.1
|
181
195
|
signing_key:
|
182
196
|
specification_version: 4
|
183
197
|
summary: FreshConnection supports to connect with Mysql slave servers via Load Balancers.
|