activerecord-mysql-reconnect 0.3.3 → 0.3.4
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 +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
|