activerecord-mysql-reconnect 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/ChangeLog +5 -0
- data/README.md +5 -1
- data/activerecord-mysql-reconnect.gemspec +2 -0
- data/lib/activerecord-mysql-reconnect.rb +5 -0
- data/lib/activerecord/mysql/reconnect.rb +35 -4
- data/lib/activerecord/mysql/reconnect/base_ext.rb +8 -0
- data/lib/activerecord/mysql/reconnect/connection_pool_ext.rb +2 -1
- data/lib/activerecord/mysql/reconnect/version.rb +1 -1
- data/run-all-tests.sh +46 -0
- data/spec/activerecord-mysql-reconnect_spec.rb +94 -70
- data/spec/spec_helper.rb +44 -0
- metadata +43 -13
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Njk5Yjk5MDk0ZWUyMjlkNjRkNWUwMWMxMDkxMTQyZGE4NTczYjUyYg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9feafc3ddcaeba6d385f2d99565689efcaa3c46b
|
4
|
+
data.tar.gz: 5c74370dd16ba0e406eccd436140da9c74c62cf7
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NDFkNjJjODg4ZmViMThlMTE2OTRiZGIyN2FmMjE2MGUxZTQyZmRiMTRjZDIx
|
11
|
-
MTc2OWQ3NzE1ZDQzYjQ0MTYxMDQ2MDcyOTc3NWRiNmIzNjkzNWY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZmNlMzZkZmNhZjRhNjc1Yzk0MGM1NmMxMzBjM2YzN2U1MGRiYTk5ZDdmYjQ1
|
14
|
-
NTJkMmE2NjFmMzViN2U2OTNkMDM4YjRmYzE5MWM2NDU3MWQ3MjY5NDlkNGY5
|
15
|
-
YTRiZWE5Y2U5MWU1ODhmOTA4ZjAwYzUwNTlhNTc2Y2Y5OGU1M2Q=
|
6
|
+
metadata.gz: 3166411ed87951ce3c42cb8626b4378b2da20c6d87a79963632b00fc74f819e9aa7fa1880760c9fdcb86462a3b15bf4cbb2443258282f051f44bcf25a4160e20
|
7
|
+
data.tar.gz: 98212109f565974bc9f4a04731d7fbe754bfbfedf453ac02cf8cc7588d1b437321a918de915d728cb49aaa0cc6c13047c95603b29aef9a1e525303be00c2e888
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -22,7 +22,8 @@ Or install it yourself as:
|
|
22
22
|
## Usage
|
23
23
|
|
24
24
|
```ruby
|
25
|
-
require '
|
25
|
+
require 'active_record'
|
26
|
+
require 'activerecord-mysql-reconnect'
|
26
27
|
require 'logger'
|
27
28
|
|
28
29
|
ActiveRecord::Base.establish_connection(
|
@@ -89,7 +90,10 @@ gem 'activerecord-mysql-reconnect'
|
|
89
90
|
MyApp::Application.configure do
|
90
91
|
...
|
91
92
|
config.active_record.enable_retry = true
|
93
|
+
#config.active_record.retry_databases = :employees # or [:employees], ['employees']
|
94
|
+
# retry_databases -> 0: retry all databases (default)
|
92
95
|
config.active_record.execution_tries = 10 # times
|
96
|
+
# execution_tries -> 0: retry indefinitely
|
93
97
|
config.active_record.execution_retry_wait = 1.5 # sec
|
94
98
|
config.active_record.retry_mode = :rw # default: `:r`, valid values: `:r`, `:rw`, `:force`
|
95
99
|
...
|
@@ -20,8 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
# '~> 3.2.14' or '~> 4.0.2'
|
22
22
|
spec.add_dependency 'activerecord'
|
23
|
+
spec.add_dependency 'activesupport'
|
23
24
|
spec.add_dependency 'mysql2'
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
26
|
spec.add_development_dependency 'rake'
|
26
27
|
spec.add_development_dependency 'rspec', '>= 2.14.1'
|
28
|
+
spec.add_development_dependency 'rspec-instafail'
|
27
29
|
end
|
@@ -3,12 +3,10 @@ require 'logger'
|
|
3
3
|
require 'bigdecimal'
|
4
4
|
|
5
5
|
require 'active_record'
|
6
|
-
require 'active_record/base'
|
7
6
|
require 'active_record/connection_adapters/abstract_adapter'
|
8
7
|
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
9
8
|
require 'active_record/connection_adapters/mysql2_adapter'
|
10
9
|
require 'active_record/connection_adapters/abstract/connection_pool'
|
11
|
-
require 'active_support'
|
12
10
|
|
13
11
|
require 'activerecord/mysql/reconnect/version'
|
14
12
|
require 'activerecord/mysql/reconnect/base_ext'
|
@@ -77,6 +75,20 @@ module Activerecord::Mysql::Reconnect
|
|
77
75
|
@activerecord_mysql_reconnect_retry_mode || DEFAULT_RETRY_MODE
|
78
76
|
end
|
79
77
|
|
78
|
+
def retry_databases=(v)
|
79
|
+
v ||= []
|
80
|
+
|
81
|
+
unless v.kind_of?(Array)
|
82
|
+
v = [v]
|
83
|
+
end
|
84
|
+
|
85
|
+
@activerecord_mysql_reconnect_retry_databases = v.map {|i| i.to_s }
|
86
|
+
end
|
87
|
+
|
88
|
+
def retry_databases
|
89
|
+
@activerecord_mysql_reconnect_retry_databases || []
|
90
|
+
end
|
91
|
+
|
80
92
|
def retryable(opts)
|
81
93
|
block = opts.fetch(:proc)
|
82
94
|
on_error = opts[:on_error]
|
@@ -95,8 +107,9 @@ module Activerecord::Mysql::Reconnect
|
|
95
107
|
|
96
108
|
opt_msgs = ["cause: #{e} [#{e.class}]"]
|
97
109
|
|
98
|
-
if conn
|
99
|
-
|
110
|
+
if conn
|
111
|
+
conn_info = connection_info(conn)
|
112
|
+
opt_msgs << 'connection: ' + [:host, :database, :username].map {|k| "#{k}=#{conn_info[k]}" }.join(";")
|
100
113
|
end
|
101
114
|
|
102
115
|
logger.warn("MySQL server has gone away. Trying to reconnect in #{wait.to_f} seconds. (#{opt_msgs.join(', ')})")
|
@@ -161,11 +174,17 @@ module Activerecord::Mysql::Reconnect
|
|
161
174
|
def should_handle?(e, opts = {})
|
162
175
|
sql = opts[:sql]
|
163
176
|
retry_mode = opts[:retry_mode]
|
177
|
+
conn = opts[:connection]
|
164
178
|
|
165
179
|
if without_retry?
|
166
180
|
return false
|
167
181
|
end
|
168
182
|
|
183
|
+
if conn and not retry_databases.empty?
|
184
|
+
conn_info = connection_info(conn)
|
185
|
+
return false unless retry_databases.include?(conn_info[:database])
|
186
|
+
end
|
187
|
+
|
169
188
|
unless HANDLE_ERROR.any? {|i| e.kind_of?(i) }
|
170
189
|
return false
|
171
190
|
end
|
@@ -186,5 +205,17 @@ module Activerecord::Mysql::Reconnect
|
|
186
205
|
|
187
206
|
return true
|
188
207
|
end
|
208
|
+
|
209
|
+
def connection_info(conn)
|
210
|
+
conn_info = {}
|
211
|
+
|
212
|
+
if conn.kind_of?(Mysql2::Client)
|
213
|
+
[:host, :database, :username].each {|k| conn_info[k] = conn.query_options[k] }
|
214
|
+
elsif conn.kind_of?(Hash)
|
215
|
+
conn_info = conn.dup
|
216
|
+
end
|
217
|
+
|
218
|
+
return conn_info
|
219
|
+
end
|
189
220
|
end # end of class methods
|
190
221
|
end
|
@@ -15,6 +15,14 @@ class ActiveRecord::Base
|
|
15
15
|
Activerecord::Mysql::Reconnect.retry_mode
|
16
16
|
end
|
17
17
|
|
18
|
+
def retry_databases=(v)
|
19
|
+
Activerecord::Mysql::Reconnect.retry_databases = v
|
20
|
+
end
|
21
|
+
|
22
|
+
def retry_databases
|
23
|
+
Activerecord::Mysql::Reconnect.retry_databases
|
24
|
+
end
|
25
|
+
|
18
26
|
def without_retry
|
19
27
|
Activerecord::Mysql::Reconnect.without_retry do
|
20
28
|
yield
|
data/run-all-tests.sh
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
# sysvbanner
|
5
|
+
# https://github.com/uffejakobsen/sysvbanner
|
6
|
+
|
7
|
+
banner `mysqld --version`
|
8
|
+
|
9
|
+
export ACTIVERECORD_MYSQL_RECONNECT_ENGINE=InnoDB
|
10
|
+
banner $ACTIVERECORD_MYSQL_RECONNECT_ENGINE
|
11
|
+
|
12
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '= 3.2.14'/" activerecord-mysql-reconnect.gemspec
|
13
|
+
bundle install -j4
|
14
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
15
|
+
bundle exec rake
|
16
|
+
|
17
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '~> 3.2.14'/" activerecord-mysql-reconnect.gemspec
|
18
|
+
bundle install -j4
|
19
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
20
|
+
bundle exec rake
|
21
|
+
|
22
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '~> 4.0'/" activerecord-mysql-reconnect.gemspec
|
23
|
+
bundle install -j4
|
24
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
25
|
+
bundle exec rake
|
26
|
+
|
27
|
+
export ACTIVERECORD_MYSQL_RECONNECT_ENGINE=MyISAM
|
28
|
+
banner $ACTIVERECORD_MYSQL_RECONNECT_ENGINE
|
29
|
+
|
30
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '= 3.2.14'/" activerecord-mysql-reconnect.gemspec
|
31
|
+
bundle install -j4
|
32
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
33
|
+
bundle exec rake
|
34
|
+
|
35
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '~> 3.2.14'/" activerecord-mysql-reconnect.gemspec
|
36
|
+
bundle install -j4
|
37
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
38
|
+
bundle exec rake
|
39
|
+
|
40
|
+
sed -i.bak "s/spec.add_dependency 'activerecord'.*/spec.add_dependency 'activerecord', '~> 4.0'/" activerecord-mysql-reconnect.gemspec
|
41
|
+
bundle install -j4
|
42
|
+
banner `bundle exec ruby -e 'require "active_record"; puts ActiveRecord::VERSION::STRING'`
|
43
|
+
bundle exec rake
|
44
|
+
|
45
|
+
git checkout activerecord-mysql-reconnect.gemspec
|
46
|
+
rm *.bak spec/*.bak
|
@@ -18,7 +18,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
18
18
|
it 'on select' do
|
19
19
|
expect {
|
20
20
|
th = thread_run {|do_stop|
|
21
|
-
expect(Employee.where(:id => 1).pluck('sleep(
|
21
|
+
expect(Employee.where(:id => 1).pluck('sleep(10) * 0')).to eq([0])
|
22
22
|
}
|
23
23
|
|
24
24
|
mysql_restart
|
@@ -36,7 +36,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
36
36
|
emp = Employee.create(
|
37
37
|
:emp_no => 1,
|
38
38
|
:birth_date => Time.now,
|
39
|
-
:first_name => "' + sleep(
|
39
|
+
:first_name => "' + sleep(10) + '",
|
40
40
|
:last_name => 'Tiger',
|
41
41
|
:hire_date => Time.now
|
42
42
|
)
|
@@ -58,7 +58,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
58
58
|
expect {
|
59
59
|
th = thread_run {|do_stop|
|
60
60
|
emp = Employee.where(:id => 1).first
|
61
|
-
emp.first_name = "' + sleep(
|
61
|
+
emp.first_name = "' + sleep(10) + '"
|
62
62
|
emp.last_name = 'ZapZapZap'
|
63
63
|
|
64
64
|
mysql2_error('MySQL server has gone away') do
|
@@ -88,77 +88,81 @@ describe 'activerecord-mysql-reconnect' do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'transaction' do
|
91
|
-
|
92
|
-
expect
|
91
|
+
unless /MyISAM/i =~ ENV['ACTIVERECORD_MYSQL_RECONNECT_ENGINE']
|
92
|
+
expect {
|
93
|
+
expect(Employee.count).to eq(300024)
|
93
94
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
95
|
+
mysql2_error('MySQL server has gone away') do
|
96
|
+
ActiveRecord::Base.transaction do
|
97
|
+
emp = Employee.create(
|
98
|
+
:emp_no => 1,
|
99
|
+
:birth_date => Time.now,
|
100
|
+
:first_name => 'Scott',
|
101
|
+
:last_name => 'Tiger',
|
102
|
+
:hire_date => Time.now
|
103
|
+
)
|
104
|
+
expect(emp.id).to eq(300025)
|
105
|
+
expect(emp.emp_no).to eq(1)
|
106
|
+
mysql_restart
|
107
|
+
emp = Employee.create(
|
108
|
+
:emp_no => 2,
|
109
|
+
:birth_date => Time.now,
|
110
|
+
:first_name => 'Scott',
|
111
|
+
:last_name => 'Tiger',
|
112
|
+
:hire_date => Time.now
|
113
|
+
)
|
114
|
+
expect(emp.id).to eq(300025)
|
115
|
+
expect(emp.emp_no).to eq(2)
|
116
|
+
end
|
115
117
|
end
|
116
|
-
end
|
117
118
|
|
118
|
-
|
119
|
-
|
119
|
+
expect(Employee.count).to eq(300025)
|
120
|
+
}.to_not raise_error
|
121
|
+
end
|
120
122
|
end
|
121
123
|
|
122
124
|
it 'retryable_transaction' do
|
123
|
-
|
124
|
-
expect
|
125
|
+
unless /MyISAM/i =~ ENV['ACTIVERECORD_MYSQL_RECONNECT_ENGINE']
|
126
|
+
expect {
|
127
|
+
expect(Employee.count).to eq(300024)
|
125
128
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
129
|
+
mysql2_error('MySQL server has gone away') do
|
130
|
+
ActiveRecord::Base.retryable_transaction do
|
131
|
+
emp = Employee.create(
|
132
|
+
:emp_no => 1,
|
133
|
+
:birth_date => Time.now,
|
134
|
+
:first_name => 'Scott',
|
135
|
+
:last_name => 'Tiger',
|
136
|
+
:hire_date => Time.now
|
137
|
+
)
|
138
|
+
expect(emp.id).to eq(300025)
|
139
|
+
expect(emp.emp_no).to eq(1)
|
140
|
+
mysql_restart
|
141
|
+
emp = Employee.create(
|
142
|
+
:emp_no => 2,
|
143
|
+
:birth_date => Time.now,
|
144
|
+
:first_name => 'Scott',
|
145
|
+
:last_name => 'Tiger',
|
146
|
+
:hire_date => Time.now
|
147
|
+
)
|
148
|
+
expect(emp.id).to eq(300026)
|
149
|
+
expect(emp.emp_no).to eq(2)
|
150
|
+
mysql_restart
|
151
|
+
emp = Employee.create(
|
152
|
+
:emp_no => 3,
|
153
|
+
:birth_date => Time.now,
|
154
|
+
:first_name => 'Scott',
|
155
|
+
:last_name => 'Tiger',
|
156
|
+
:hire_date => Time.now
|
157
|
+
)
|
158
|
+
expect(emp.id).to eq(300027)
|
159
|
+
expect(emp.emp_no).to eq(3)
|
160
|
+
end
|
157
161
|
end
|
158
|
-
end
|
159
162
|
|
160
|
-
|
161
|
-
|
163
|
+
expect(Employee.count).to eq(300027)
|
164
|
+
}.to_not raise_error
|
165
|
+
end
|
162
166
|
end
|
163
167
|
|
164
168
|
it 'retry new connection' do
|
@@ -173,7 +177,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
173
177
|
expect {
|
174
178
|
th = thread_run {|do_stop|
|
175
179
|
mysql_stop
|
176
|
-
sleep
|
180
|
+
sleep 10
|
177
181
|
mysql_start
|
178
182
|
}
|
179
183
|
|
@@ -186,7 +190,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
186
190
|
expect {
|
187
191
|
th = thread_run {|do_stop|
|
188
192
|
mysql_stop
|
189
|
-
sleep
|
193
|
+
sleep 10
|
190
194
|
mysql_start
|
191
195
|
}
|
192
196
|
|
@@ -224,12 +228,14 @@ describe 'activerecord-mysql-reconnect' do
|
|
224
228
|
it 'read only (write)' do
|
225
229
|
enable_read_only do
|
226
230
|
expect {
|
231
|
+
lock_table
|
232
|
+
|
227
233
|
th = thread_run {|do_stop|
|
228
234
|
mysql2_error('MySQL server has gone away') do
|
229
235
|
emp = Employee.create(
|
230
236
|
:emp_no => 1,
|
231
237
|
:birth_date => Time.now,
|
232
|
-
:first_name =>
|
238
|
+
:first_name => 'Scott',
|
233
239
|
:last_name => 'Tiger',
|
234
240
|
:hire_date => Time.now
|
235
241
|
)
|
@@ -243,12 +249,14 @@ describe 'activerecord-mysql-reconnect' do
|
|
243
249
|
end
|
244
250
|
|
245
251
|
it 'lost connection' do
|
246
|
-
sql = "INSERT INTO `employees` (`birth_date`, `emp_no`, `first_name`, `hire_date`, `last_name`) VALUES ('2014-01-09 03:22:25', 1, ''
|
252
|
+
sql = "INSERT INTO `employees` (`birth_date`, `emp_no`, `first_name`, `hire_date`, `last_name`) VALUES ('2014-01-09 03:22:25', 1, 'Scott', '2014-01-09 03:22:25', 'Tiger')"
|
247
253
|
|
248
254
|
expect {
|
249
255
|
ActiveRecord::Base.connection.execute(sql)
|
250
256
|
}.to_not raise_error
|
251
257
|
|
258
|
+
lock_table
|
259
|
+
|
252
260
|
mysql2_error('Lost connection to MySQL server during query') do
|
253
261
|
expect {
|
254
262
|
th = thread_run {|do_stop|
|
@@ -262,7 +270,7 @@ describe 'activerecord-mysql-reconnect' do
|
|
262
270
|
end
|
263
271
|
|
264
272
|
it 'force retry' do
|
265
|
-
sql = "INSERT INTO `employees` (`birth_date`, `emp_no`, `first_name`, `hire_date`, `last_name`) VALUES ('2014-01-09 03:22:25', 1, '' + sleep(
|
273
|
+
sql = "INSERT INTO `employees` (`birth_date`, `emp_no`, `first_name`, `hire_date`, `last_name`) VALUES ('2014-01-09 03:22:25', 1, '' + sleep(10) + '', '2014-01-09 03:22:25', 'Tiger')"
|
266
274
|
|
267
275
|
expect {
|
268
276
|
ActiveRecord::Base.connection.execute(sql)
|
@@ -291,4 +299,20 @@ describe 'activerecord-mysql-reconnect' do
|
|
291
299
|
}.to_not raise_error
|
292
300
|
end
|
293
301
|
end
|
302
|
+
|
303
|
+
it 'retry specific database' do
|
304
|
+
retry_databases(:employees2) do
|
305
|
+
expect {
|
306
|
+
expect(Employee.all.length).to eq(300024)
|
307
|
+
mysql_restart
|
308
|
+
expect(Employee.all.length).to eq(300024)
|
309
|
+
}.to raise_error(ActiveRecord::StatementInvalid)
|
310
|
+
end
|
311
|
+
|
312
|
+
expect {
|
313
|
+
expect(Employee.all.length).to eq(300024)
|
314
|
+
mysql_restart
|
315
|
+
expect(Employee.all.length).to eq(300024)
|
316
|
+
}.to_not raise_error
|
317
|
+
end
|
294
318
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -67,6 +67,16 @@ def force_retry
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
def retry_databases(dbs)
|
71
|
+
begin
|
72
|
+
expect(ActiveRecord::Base.retry_databases).to eq([])
|
73
|
+
ActiveRecord::Base.retry_databases = dbs
|
74
|
+
yield
|
75
|
+
ensure
|
76
|
+
ActiveRecord::Base.retry_databases = []
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
70
80
|
def thread_run
|
71
81
|
thread_running = false
|
72
82
|
do_stop = proc { thread_running = false }
|
@@ -84,8 +94,42 @@ def thread_run
|
|
84
94
|
return th
|
85
95
|
end
|
86
96
|
|
97
|
+
def lock_table
|
98
|
+
Thread.start do
|
99
|
+
begin
|
100
|
+
ActiveRecord::Base.connection.execute("LOCK TABLES employees WRITE")
|
101
|
+
rescue Exception
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
sleep 3
|
106
|
+
end
|
107
|
+
|
87
108
|
RSpec.configure do |config|
|
109
|
+
config.before(:all) do
|
110
|
+
if ENV['ACTIVERECORD_MYSQL_RECONNECT_ENGINE']
|
111
|
+
engine = ENV['ACTIVERECORD_MYSQL_RECONNECT_ENGINE']
|
112
|
+
employees_sql = File.expand_path('../employees.sql', __FILE__)
|
113
|
+
system("sed -i.bak '17s/ENGINE=[^ ]*/ENGINE=#{engine}/' #{employees_sql}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
config.after(:all) do
|
118
|
+
employees_sql = File.expand_path('../employees.sql', __FILE__)
|
119
|
+
system("git checkout #{employees_sql}")
|
120
|
+
end
|
121
|
+
|
88
122
|
config.before(:each) do
|
123
|
+
desc = example.metadata[:full_description]
|
124
|
+
puts <<-EOS
|
125
|
+
|
126
|
+
|
127
|
+
#{'#' * (desc.length + 4)}
|
128
|
+
# #{desc} #
|
129
|
+
#{'#' * (desc.length + 4)}
|
130
|
+
|
131
|
+
EOS
|
132
|
+
|
89
133
|
employees_sql = File.expand_path('../employees.sql', __FILE__)
|
90
134
|
system("mysql -u root < #{employees_sql}")
|
91
135
|
|
metadata
CHANGED
@@ -1,41 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-mysql-reconnect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: mysql2
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - '>='
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - '>='
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
@@ -56,30 +70,44 @@ dependencies:
|
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - '>='
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - '>='
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: 2.14.1
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - '>='
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 2.14.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-instafail
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description: It is the library to reconnect automatically when ActiveRecord is disconnected
|
84
112
|
from MySQL.
|
85
113
|
email:
|
@@ -96,6 +124,7 @@ files:
|
|
96
124
|
- README.md
|
97
125
|
- Rakefile
|
98
126
|
- activerecord-mysql-reconnect.gemspec
|
127
|
+
- lib/activerecord-mysql-reconnect.rb
|
99
128
|
- lib/activerecord/mysql/reconnect.rb
|
100
129
|
- lib/activerecord/mysql/reconnect/abstract_adapter_ext.rb
|
101
130
|
- lib/activerecord/mysql/reconnect/abstract_mysql_adapter_ext.rb
|
@@ -103,6 +132,7 @@ files:
|
|
103
132
|
- lib/activerecord/mysql/reconnect/connection_pool_ext.rb
|
104
133
|
- lib/activerecord/mysql/reconnect/mysql2_adapter_ext.rb
|
105
134
|
- lib/activerecord/mysql/reconnect/version.rb
|
135
|
+
- run-all-tests.sh
|
106
136
|
- spec/activerecord-mysql-reconnect_spec.rb
|
107
137
|
- spec/employees.sql
|
108
138
|
- spec/spec_helper.rb
|
@@ -116,17 +146,17 @@ require_paths:
|
|
116
146
|
- lib
|
117
147
|
required_ruby_version: !ruby/object:Gem::Requirement
|
118
148
|
requirements:
|
119
|
-
- -
|
149
|
+
- - '>='
|
120
150
|
- !ruby/object:Gem::Version
|
121
151
|
version: '0'
|
122
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
153
|
requirements:
|
124
|
-
- -
|
154
|
+
- - '>='
|
125
155
|
- !ruby/object:Gem::Version
|
126
156
|
version: '0'
|
127
157
|
requirements: []
|
128
158
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.
|
159
|
+
rubygems_version: 2.0.14
|
130
160
|
signing_key:
|
131
161
|
specification_version: 4
|
132
162
|
summary: It is the library to reconnect automatically when ActiveRecord is disconnected
|