activerecord-retry-reads 1.0.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
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 107348efac31c4aa59343edc97e421b2d67f065998e70e3c10c31880a7dd5ecd
|
4
|
+
data.tar.gz: 44e13abff494439827baeb1b19a9c32f2e6052c410b07c0ac4f1a81ed896132b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2f00ca6ff861653defcdcf929aadfbf8fa5a0237006e0daede320c0e67d6d1292bd5517452049281dc9d0c988ad56ede2e6a0fe835df8f6d0ef566431573a899
|
7
|
+
data.tar.gz: 79d8f13f5c2bcca8e5e4d19b5935a32c18373052dbc87b837c758581a9830fbe5071be5810f9d80e8a524ac20ddc7efd8727a4c68b225338abbdc347cbea7cc0
|
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# activerecord-retry-reads
|
2
|
+
|
3
|
+
Automatically retry read queries.
|
4
|
+
|
5
|
+
Supports Rails 7.1+ and the `mysql2`, `postgresql`, `sqlite3`, or `trilogy` adapters.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
In your Gemfile:
|
9
|
+
|
10
|
+
```
|
11
|
+
gem 'activerecord-mysql-reconnect'
|
12
|
+
```
|
13
|
+
|
14
|
+
## Usage
|
15
|
+
|
16
|
+
There is currently no configuration for this gem.
|
17
|
+
|
18
|
+
## Why this gem?
|
19
|
+
|
20
|
+
Historically, gems like [activerecord-mysql-reconnect](https://github.com/planningcenter/activerecord-mysql-reconnect) have been used to automatically reconnect and retry queries after a disconnect from MySQL. They are not compatible with Rails >= 7.1.
|
21
|
+
|
22
|
+
Rails 7.1 added native reconnect and retry functionality, but it is _extremely_ conservative about what queries are automatically retried. In almost every Rails app any _read_ query is idempotent and safe to retry. If this is not true in your app, do not use this gem!
|
23
|
+
|
24
|
+
This gem expands the automatic retry functionality added in Rails 7.1 to enable retries for every _read_ query.
|
25
|
+
|
26
|
+
## Testing
|
27
|
+
|
28
|
+
Run tests with:
|
29
|
+
|
30
|
+
```
|
31
|
+
bundle exec appraisal install
|
32
|
+
bundle exec appraisal rake test
|
33
|
+
```
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
module AutoRetryAllReads
|
5
|
+
def raw_execute(sql, name, **kwargs)
|
6
|
+
kwargs[:allow_retry] = true if !write_query?(sql)
|
7
|
+
super(sql, name, **kwargs)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ActiveSupport.on_load(:active_record_mysql2adapter) do
|
12
|
+
Mysql2::DatabaseStatements.prepend(AutoRetryAllReads)
|
13
|
+
end
|
14
|
+
ActiveSupport.on_load(:active_record_postgresqladapter) do
|
15
|
+
PostgreSQL::DatabaseStatements.prepend(AutoRetryAllReads)
|
16
|
+
end
|
17
|
+
ActiveSupport.on_load(:active_record_sqlite3adapter) do
|
18
|
+
Sqlite3::DatabaseStatements.prepend(AutoRetryAllReads)
|
19
|
+
end
|
20
|
+
ActiveSupport.on_load(:active_record_trilogyadapter) do
|
21
|
+
Trilogy::DatabaseStatements.prepend(AutoRetryAllReads)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activerecord-retry-reads
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ben@planningcenter.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 7.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: appraisal
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Retry read queries automatically when disconnected from the database
|
70
|
+
email:
|
71
|
+
- ben@planningcenter.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- README.md
|
77
|
+
- lib/activerecord-retry-reads.rb
|
78
|
+
- lib/activerecord-retry-reads/version.rb
|
79
|
+
- lib/activerecord/connection_adapters/auto_retry_all_reads.rb
|
80
|
+
homepage: https://github.com/planningcenter/activerecord-retry-reads
|
81
|
+
licenses:
|
82
|
+
- MIT
|
83
|
+
metadata: {}
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubygems_version: 3.5.3
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: Retry read queries automatically when disconnected from the database
|
103
|
+
test_files: []
|