rails_failover 2.1.0 → 2.1.1
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/.github/workflows/ci.yml +23 -14
- data/.gitignore +2 -1
- data/.rspec +1 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +205 -0
- data/README.md +0 -1
- data/lib/rails_failover/active_record/handler.rb +5 -4
- data/lib/rails_failover/active_record/railtie.rb +1 -1
- data/lib/rails_failover/version.rb +1 -1
- data/makefile +2 -13
- data/postgresql.mk +30 -10
- data/rails_failover.gemspec +3 -3
- metadata +16 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cc30e56251321fcdacf633da4dba5d747e939d315d1ccb7db65796ef8facd654
|
|
4
|
+
data.tar.gz: 63f9f2f3dd7bd794c648f396115629d84705035f0136a49d60c1c97d1b52032f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1123d003526ea98b4ee857e74217a93938adfb59215b8b3e8f627044ec439a2709ecdb431b004dbf52b5d34046bdcadee2571265a75802492da81f2a7d7a90fc
|
|
7
|
+
data.tar.gz: 919021b80af3b14829c9c27e0092490bb93b2e50dbbb983883ddf894711a05e2707b161f478587a791ab0dad991954a7a529134ec40b2dc9b9dd74f6f495a8f3
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
- name: Setup ruby
|
|
17
17
|
uses: ruby/setup-ruby@v1
|
|
18
18
|
with:
|
|
19
|
-
ruby-version:
|
|
19
|
+
ruby-version: "3.2"
|
|
20
20
|
bundler-cache: true
|
|
21
21
|
|
|
22
22
|
- name: Rubocop
|
|
@@ -29,13 +29,13 @@ jobs:
|
|
|
29
29
|
bundle exec stree check Gemfile rails_failover.gemspec $(git ls-files '*.rb')
|
|
30
30
|
|
|
31
31
|
redis:
|
|
32
|
-
name:
|
|
32
|
+
name: "Redis (Ruby ${{ matrix.ruby }})"
|
|
33
33
|
runs-on: ubuntu-latest
|
|
34
34
|
|
|
35
35
|
strategy:
|
|
36
36
|
fail-fast: false
|
|
37
37
|
matrix:
|
|
38
|
-
ruby: [
|
|
38
|
+
ruby: ["3.4", "3.3", "3.2", "3.1"]
|
|
39
39
|
|
|
40
40
|
steps:
|
|
41
41
|
- uses: actions/checkout@v3
|
|
@@ -44,7 +44,9 @@ jobs:
|
|
|
44
44
|
uses: ruby/setup-ruby@v1
|
|
45
45
|
with:
|
|
46
46
|
ruby-version: ${{ matrix.ruby }}
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
- name: Setup gems
|
|
49
|
+
run: bundle install
|
|
48
50
|
|
|
49
51
|
- name: Setup redis
|
|
50
52
|
run: sudo apt-get install redis-server
|
|
@@ -54,21 +56,21 @@ jobs:
|
|
|
54
56
|
|
|
55
57
|
active_record:
|
|
56
58
|
runs-on: ubuntu-latest
|
|
57
|
-
name:
|
|
59
|
+
name: "ActiveRecord ~>${{ matrix.rails }} (Ruby ${{ matrix.ruby }})"
|
|
58
60
|
|
|
59
61
|
strategy:
|
|
60
62
|
fail-fast: false
|
|
61
63
|
matrix:
|
|
62
|
-
ruby: [
|
|
63
|
-
rails: [
|
|
64
|
+
ruby: ["3.4", "3.3", "3.2", "3.1"]
|
|
65
|
+
rails: ["7.1.0", "7.0.0"]
|
|
64
66
|
include:
|
|
65
|
-
- ruby:
|
|
66
|
-
rails:
|
|
67
|
+
- ruby: "3.2"
|
|
68
|
+
rails: "6.1.0"
|
|
67
69
|
exclude:
|
|
68
|
-
- ruby:
|
|
69
|
-
rails:
|
|
70
|
-
- ruby:
|
|
71
|
-
rails:
|
|
70
|
+
- ruby: "3.4"
|
|
71
|
+
rails: "7.0.0"
|
|
72
|
+
- ruby: "3.3"
|
|
73
|
+
rails: "7.0.0"
|
|
72
74
|
|
|
73
75
|
steps:
|
|
74
76
|
- uses: actions/checkout@v3
|
|
@@ -84,13 +86,20 @@ jobs:
|
|
|
84
86
|
- name: Setup postgres
|
|
85
87
|
run: |
|
|
86
88
|
make setup_pg
|
|
87
|
-
make start_pg
|
|
88
89
|
|
|
89
90
|
- name: ActiveRecord specs
|
|
90
91
|
env:
|
|
91
92
|
RAILS_VERSION: ${{ matrix.rails }}
|
|
92
93
|
run: bin/rspec active_record
|
|
93
94
|
|
|
95
|
+
- name: Dump Unicorn STDERR logs
|
|
96
|
+
if: ${{ failure() }}
|
|
97
|
+
run: cat spec/support/dummy_app/log/unicorn.stderr.log
|
|
98
|
+
|
|
99
|
+
- name: Dump Rails logs
|
|
100
|
+
if: ${{ failure() }}
|
|
101
|
+
run: cat spec/support/dummy_app/log/production.log
|
|
102
|
+
|
|
94
103
|
publish:
|
|
95
104
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
96
105
|
needs: [lint, redis, active_record]
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.1.1] - 2024-07-02
|
|
9
|
+
|
|
10
|
+
- FIX: Falling back to primary PG server not reliable on Rails 7.1
|
|
11
|
+
|
|
8
12
|
## [2.1.0] - 2024-05-29
|
|
13
|
+
|
|
9
14
|
- DEV: Update dependencies to officially support Rails 7.1
|
|
10
15
|
|
|
11
16
|
## [2.0.1] - 2023-05-30
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
rails_failover (2.1.1)
|
|
5
|
+
activerecord (>= 6.1, < 8.0)
|
|
6
|
+
concurrent-ruby
|
|
7
|
+
railties (>= 6.1, < 8.0)
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
actionpack (7.1.3.4)
|
|
13
|
+
actionview (= 7.1.3.4)
|
|
14
|
+
activesupport (= 7.1.3.4)
|
|
15
|
+
nokogiri (>= 1.8.5)
|
|
16
|
+
racc
|
|
17
|
+
rack (>= 2.2.4)
|
|
18
|
+
rack-session (>= 1.0.1)
|
|
19
|
+
rack-test (>= 0.6.3)
|
|
20
|
+
rails-dom-testing (~> 2.2)
|
|
21
|
+
rails-html-sanitizer (~> 1.6)
|
|
22
|
+
actionview (7.1.3.4)
|
|
23
|
+
activesupport (= 7.1.3.4)
|
|
24
|
+
builder (~> 3.1)
|
|
25
|
+
erubi (~> 1.11)
|
|
26
|
+
rails-dom-testing (~> 2.2)
|
|
27
|
+
rails-html-sanitizer (~> 1.6)
|
|
28
|
+
activemodel (7.1.3.4)
|
|
29
|
+
activesupport (= 7.1.3.4)
|
|
30
|
+
activerecord (7.1.3.4)
|
|
31
|
+
activemodel (= 7.1.3.4)
|
|
32
|
+
activesupport (= 7.1.3.4)
|
|
33
|
+
timeout (>= 0.4.0)
|
|
34
|
+
activesupport (7.1.3.4)
|
|
35
|
+
base64
|
|
36
|
+
bigdecimal
|
|
37
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
38
|
+
connection_pool (>= 2.2.5)
|
|
39
|
+
drb
|
|
40
|
+
i18n (>= 1.6, < 2)
|
|
41
|
+
minitest (>= 5.1)
|
|
42
|
+
mutex_m
|
|
43
|
+
tzinfo (~> 2.0)
|
|
44
|
+
ast (2.4.2)
|
|
45
|
+
base64 (0.2.0)
|
|
46
|
+
bigdecimal (3.1.8)
|
|
47
|
+
builder (3.3.0)
|
|
48
|
+
byebug (11.1.3)
|
|
49
|
+
concurrent-ruby (1.3.3)
|
|
50
|
+
connection_pool (2.4.1)
|
|
51
|
+
crass (1.0.6)
|
|
52
|
+
diff-lcs (1.5.1)
|
|
53
|
+
drb (2.2.1)
|
|
54
|
+
erubi (1.13.0)
|
|
55
|
+
i18n (1.14.5)
|
|
56
|
+
concurrent-ruby (~> 1.0)
|
|
57
|
+
io-console (0.7.2)
|
|
58
|
+
irb (1.13.2)
|
|
59
|
+
rdoc (>= 4.0.0)
|
|
60
|
+
reline (>= 0.4.2)
|
|
61
|
+
json (2.7.2)
|
|
62
|
+
language_server-protocol (3.17.0.3)
|
|
63
|
+
loofah (2.22.0)
|
|
64
|
+
crass (~> 1.0.2)
|
|
65
|
+
nokogiri (>= 1.12.0)
|
|
66
|
+
minitest (5.24.1)
|
|
67
|
+
mutex_m (0.2.0)
|
|
68
|
+
nokogiri (1.16.6-aarch64-linux)
|
|
69
|
+
racc (~> 1.4)
|
|
70
|
+
nokogiri (1.16.6-arm-linux)
|
|
71
|
+
racc (~> 1.4)
|
|
72
|
+
nokogiri (1.16.6-arm64-darwin)
|
|
73
|
+
racc (~> 1.4)
|
|
74
|
+
nokogiri (1.16.6-x86-linux)
|
|
75
|
+
racc (~> 1.4)
|
|
76
|
+
nokogiri (1.16.6-x86_64-darwin)
|
|
77
|
+
racc (~> 1.4)
|
|
78
|
+
nokogiri (1.16.6-x86_64-linux)
|
|
79
|
+
racc (~> 1.4)
|
|
80
|
+
parallel (1.25.1)
|
|
81
|
+
parser (3.3.3.0)
|
|
82
|
+
ast (~> 2.4.1)
|
|
83
|
+
racc
|
|
84
|
+
pg (1.5.6)
|
|
85
|
+
prettier_print (1.2.1)
|
|
86
|
+
psych (5.1.2)
|
|
87
|
+
stringio
|
|
88
|
+
racc (1.8.0)
|
|
89
|
+
rack (3.1.6)
|
|
90
|
+
rack-session (2.0.0)
|
|
91
|
+
rack (>= 3.0.0)
|
|
92
|
+
rack-test (2.1.0)
|
|
93
|
+
rack (>= 1.3)
|
|
94
|
+
rackup (2.1.0)
|
|
95
|
+
rack (>= 3)
|
|
96
|
+
webrick (~> 1.8)
|
|
97
|
+
rails-dom-testing (2.2.0)
|
|
98
|
+
activesupport (>= 5.0.0)
|
|
99
|
+
minitest
|
|
100
|
+
nokogiri (>= 1.6)
|
|
101
|
+
rails-html-sanitizer (1.6.0)
|
|
102
|
+
loofah (~> 2.21)
|
|
103
|
+
nokogiri (~> 1.14)
|
|
104
|
+
railties (7.1.3.4)
|
|
105
|
+
actionpack (= 7.1.3.4)
|
|
106
|
+
activesupport (= 7.1.3.4)
|
|
107
|
+
irb
|
|
108
|
+
rackup (>= 1.0.0)
|
|
109
|
+
rake (>= 12.2)
|
|
110
|
+
thor (~> 1.0, >= 1.2.2)
|
|
111
|
+
zeitwerk (~> 2.6)
|
|
112
|
+
rainbow (3.1.1)
|
|
113
|
+
rake (13.2.1)
|
|
114
|
+
rdoc (6.7.0)
|
|
115
|
+
psych (>= 4.0.0)
|
|
116
|
+
redis (4.8.1)
|
|
117
|
+
regexp_parser (2.9.2)
|
|
118
|
+
reline (0.5.9)
|
|
119
|
+
io-console (~> 0.5)
|
|
120
|
+
rexml (3.3.1)
|
|
121
|
+
strscan
|
|
122
|
+
rspec (3.13.0)
|
|
123
|
+
rspec-core (~> 3.13.0)
|
|
124
|
+
rspec-expectations (~> 3.13.0)
|
|
125
|
+
rspec-mocks (~> 3.13.0)
|
|
126
|
+
rspec-core (3.13.0)
|
|
127
|
+
rspec-support (~> 3.13.0)
|
|
128
|
+
rspec-expectations (3.13.1)
|
|
129
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
130
|
+
rspec-support (~> 3.13.0)
|
|
131
|
+
rspec-mocks (3.13.1)
|
|
132
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
133
|
+
rspec-support (~> 3.13.0)
|
|
134
|
+
rspec-support (3.13.1)
|
|
135
|
+
rubocop (1.64.1)
|
|
136
|
+
json (~> 2.3)
|
|
137
|
+
language_server-protocol (>= 3.17.0)
|
|
138
|
+
parallel (~> 1.10)
|
|
139
|
+
parser (>= 3.3.0.2)
|
|
140
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
141
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
142
|
+
rexml (>= 3.2.5, < 4.0)
|
|
143
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
144
|
+
ruby-progressbar (~> 1.7)
|
|
145
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
146
|
+
rubocop-ast (1.31.3)
|
|
147
|
+
parser (>= 3.3.1.0)
|
|
148
|
+
rubocop-capybara (2.21.0)
|
|
149
|
+
rubocop (~> 1.41)
|
|
150
|
+
rubocop-discourse (3.8.1)
|
|
151
|
+
activesupport (>= 6.1)
|
|
152
|
+
rubocop (>= 1.59.0)
|
|
153
|
+
rubocop-capybara (>= 2.0.0)
|
|
154
|
+
rubocop-factory_bot (>= 2.0.0)
|
|
155
|
+
rubocop-rails (>= 2.25.0)
|
|
156
|
+
rubocop-rspec (>= 3.0.1)
|
|
157
|
+
rubocop-rspec_rails (>= 2.30.0)
|
|
158
|
+
rubocop-factory_bot (2.26.1)
|
|
159
|
+
rubocop (~> 1.61)
|
|
160
|
+
rubocop-rails (2.25.1)
|
|
161
|
+
activesupport (>= 4.2.0)
|
|
162
|
+
rack (>= 1.1)
|
|
163
|
+
rubocop (>= 1.33.0, < 2.0)
|
|
164
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
165
|
+
rubocop-rspec (3.0.2)
|
|
166
|
+
rubocop (~> 1.61)
|
|
167
|
+
rubocop-rspec_rails (2.30.0)
|
|
168
|
+
rubocop (~> 1.61)
|
|
169
|
+
rubocop-rspec (~> 3, >= 3.0.1)
|
|
170
|
+
ruby-progressbar (1.13.0)
|
|
171
|
+
stringio (3.1.1)
|
|
172
|
+
strscan (3.1.0)
|
|
173
|
+
syntax_tree (6.2.0)
|
|
174
|
+
prettier_print (>= 1.2.0)
|
|
175
|
+
syntax_tree-disable_ternary (1.0.0)
|
|
176
|
+
thor (1.3.1)
|
|
177
|
+
timeout (0.4.1)
|
|
178
|
+
tzinfo (2.0.6)
|
|
179
|
+
concurrent-ruby (~> 1.0)
|
|
180
|
+
unicode-display_width (2.5.0)
|
|
181
|
+
webrick (1.8.1)
|
|
182
|
+
zeitwerk (2.6.16)
|
|
183
|
+
|
|
184
|
+
PLATFORMS
|
|
185
|
+
aarch64-linux
|
|
186
|
+
arm-linux
|
|
187
|
+
arm64-darwin
|
|
188
|
+
x86-linux
|
|
189
|
+
x86_64-darwin
|
|
190
|
+
x86_64-linux
|
|
191
|
+
|
|
192
|
+
DEPENDENCIES
|
|
193
|
+
byebug
|
|
194
|
+
pg
|
|
195
|
+
rack
|
|
196
|
+
rails_failover!
|
|
197
|
+
rake
|
|
198
|
+
redis (~> 4.1)
|
|
199
|
+
rspec
|
|
200
|
+
rubocop-discourse
|
|
201
|
+
syntax_tree
|
|
202
|
+
syntax_tree-disable_ternary
|
|
203
|
+
|
|
204
|
+
BUNDLED WITH
|
|
205
|
+
2.5.11
|
data/README.md
CHANGED
|
@@ -107,7 +107,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
|
107
107
|
The ActiveRecord failover tests are run against a dummy Rails server. Run the following commands to run the test:
|
|
108
108
|
|
|
109
109
|
1. `make setup_pg`
|
|
110
|
-
2. `make start_pg`
|
|
111
110
|
3. `bin/rspec active_record`. You may also run the tests with more unicorn workers by adding the `UNICORN_WORKERS` env variable.
|
|
112
111
|
|
|
113
112
|
#### Redis
|
|
@@ -60,10 +60,11 @@ module RailsFailover
|
|
|
60
60
|
|
|
61
61
|
begin
|
|
62
62
|
connection =
|
|
63
|
-
::ActiveRecord::Base
|
|
64
|
-
|
|
65
|
-
role: handler_key
|
|
66
|
-
|
|
63
|
+
::ActiveRecord::Base
|
|
64
|
+
.connection_handler
|
|
65
|
+
.retrieve_connection(spec_name, role: handler_key)
|
|
66
|
+
.tap(&:verify!)
|
|
67
|
+
|
|
67
68
|
connection_active = connection.active?
|
|
68
69
|
rescue => e
|
|
69
70
|
logger.debug "#{Process.pid} Connection to server for '#{handler_key} #{spec_name}' failed with '#{e.message}'"
|
|
@@ -11,7 +11,7 @@ module RailsFailover
|
|
|
11
11
|
app.config.active_record_rails_failover = true
|
|
12
12
|
::ActiveSupport.on_load(:active_record) do
|
|
13
13
|
begin
|
|
14
|
-
::ActiveRecord::Base.connection
|
|
14
|
+
::ActiveRecord::Base.connection.verify!
|
|
15
15
|
rescue ::ActiveRecord::NoDatabaseError
|
|
16
16
|
# Do nothing since database hasn't been created
|
|
17
17
|
rescue ::PG::Error, ::ActiveRecord::ConnectionNotEstablished
|
data/makefile
CHANGED
|
@@ -3,19 +3,8 @@ include redis.mk
|
|
|
3
3
|
|
|
4
4
|
all: redis
|
|
5
5
|
|
|
6
|
-
active_record:
|
|
6
|
+
active_record: start_pg_primary create_test_database stop_pg test_active_record
|
|
7
7
|
|
|
8
8
|
test_active_record:
|
|
9
|
+
@BUNDLE_GEMFILE=./spec/support/dummy_app/Gemfile bundle install --quiet
|
|
9
10
|
@ACTIVE_RECORD=1 bundle exec rspec --tag type:active_record ${RSPEC_PATH}
|
|
10
|
-
|
|
11
|
-
setup_dummy_rails_server:
|
|
12
|
-
@cd spec/support/dummy_app && BUNDLE_GEMFILE=Gemfile bundle install --quiet && BUNDLE_GEMFILE=Gemfile RAILS_ENV=production $(BUNDLER_BIN) exec rails db:create db:migrate db:seed
|
|
13
|
-
|
|
14
|
-
start_dummy_rails_server:
|
|
15
|
-
@cd spec/support/dummy_app && BUNDLE_GEMFILE=Gemfile SECRET_KEY_BASE=somekey bundle exec unicorn -c config/unicorn.conf.rb -D -E production
|
|
16
|
-
|
|
17
|
-
stop_dummy_rails_server:
|
|
18
|
-
@kill -TERM $(shell cat spec/support/dummy_app/tmp/pids/unicorn.pid)
|
|
19
|
-
|
|
20
|
-
teardown_dummy_rails_server:
|
|
21
|
-
@cd spec/support/dummy_app && (! (bundle check > /dev/null 2>&1) || BUNDLE_GEMFILE=Gemfile DISABLE_DATABASE_ENVIRONMENT_CHECK=1 RAILS_ENV=production $(BUNDLER_BIN) exec rails db:drop)
|
data/postgresql.mk
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
PG_BIN_DIR := $(shell pg_config --bindir)
|
|
2
2
|
PWD := $(shell pwd)
|
|
3
|
-
PG_PRIMARY_DIR :=
|
|
3
|
+
PG_PRIMARY_DIR := /tmp/primary
|
|
4
4
|
PG_PRIMARY_DATA_DIR := $(PG_PRIMARY_DIR)/data
|
|
5
5
|
PG_PRIMARY_RUN_DIR := $(PG_PRIMARY_DIR)/run
|
|
6
|
-
PG_REPLICA_DIR :=
|
|
6
|
+
PG_REPLICA_DIR := /tmp/replica
|
|
7
7
|
PG_REPLICA_DATA_DIR := $(PG_REPLICA_DIR)/data
|
|
8
8
|
PG_REPLICA_RUN_DIR := $(PG_REPLICA_DIR)/run
|
|
9
9
|
PG_PRIMARY_PORT := 5434
|
|
@@ -14,11 +14,14 @@ PG_REPLICATION_SLOT_NAME := replication
|
|
|
14
14
|
|
|
15
15
|
setup_pg: init_primary start_pg_primary setup_primary init_replica stop_pg_primary
|
|
16
16
|
|
|
17
|
+
create_test_database:
|
|
18
|
+
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres --quiet -c "DROP DATABASE IF EXISTS test;"
|
|
19
|
+
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres --quiet -c "CREATE DATABASE test;"
|
|
20
|
+
|
|
17
21
|
setup_primary:
|
|
18
22
|
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres -c "CREATE USER $(PG_REPLICATION_USER) WITH REPLICATION ENCRYPTED PASSWORD '$(PG_REPLICATION_PASSWORD)';"
|
|
19
23
|
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres -c "SELECT * FROM pg_create_physical_replication_slot('$(PG_REPLICATION_SLOT_NAME)');"
|
|
20
24
|
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres -c "CREATE USER test;"
|
|
21
|
-
@$(PG_BIN_DIR)/psql -p $(PG_PRIMARY_PORT) -h $(PG_PRIMARY_RUN_DIR) -d postgres -c "CREATE DATABASE test;"
|
|
22
25
|
|
|
23
26
|
start_pg: start_pg_primary start_pg_replica
|
|
24
27
|
|
|
@@ -36,19 +39,36 @@ init_replica:
|
|
|
36
39
|
@chmod 0700 $(PG_REPLICA_DATA_DIR)
|
|
37
40
|
|
|
38
41
|
start_pg_primary:
|
|
39
|
-
|
|
42
|
+
@if [ ! -d "$(PG_PRIMARY_DATA_DIR)" ] || ! $(PG_BIN_DIR)/pg_ctl status -D $(PG_PRIMARY_DATA_DIR) > /dev/null 2>&1; then \
|
|
43
|
+
$(PG_BIN_DIR)/pg_ctl --silent --log /dev/null -w -D $(PG_PRIMARY_DATA_DIR) -o "-p $(PG_PRIMARY_PORT)" -o "-k $(PG_PRIMARY_RUN_DIR)" start; \
|
|
44
|
+
while ! $(PG_BIN_DIR)/pg_ctl status -D $(PG_PRIMARY_DATA_DIR) > /dev/null 2>&1; do \
|
|
45
|
+
sleep 1; \
|
|
46
|
+
done; \
|
|
47
|
+
fi
|
|
40
48
|
|
|
41
49
|
start_pg_replica:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
@if [ ! -d "$(PG_REPLICA_DATA_DIR)" ] || ! $(PG_BIN_DIR)/pg_ctl status -D $(PG_REPLICA_DATA_DIR) > /dev/null 2>&1; then \
|
|
51
|
+
$(PG_BIN_DIR)/pg_ctl --silent --log /dev/null -w -D $(PG_REPLICA_DATA_DIR) -o "-p $(PG_REPLICA_PORT)" -o "-k $(PG_REPLICA_RUN_DIR)" start; \
|
|
52
|
+
while ! $(PG_BIN_DIR)/pg_ctl status -D $(PG_REPLICA_DATA_DIR) > /dev/null 2>&1; do \
|
|
53
|
+
sleep 1; \
|
|
54
|
+
done; \
|
|
55
|
+
fi
|
|
46
56
|
|
|
47
57
|
stop_pg_primary:
|
|
48
|
-
|
|
58
|
+
@if [ -d "$(PG_PRIMARY_DATA_DIR)" ] && $(PG_BIN_DIR)/pg_ctl status -D $(PG_PRIMARY_DATA_DIR) > /dev/null 2>&1; then \
|
|
59
|
+
$(PG_BIN_DIR)/pg_ctl --silent --log /dev/null -w -D $(PG_PRIMARY_DATA_DIR) -o "-p $(PG_PRIMARY_PORT)" -o "-k $(PG_PRIMARY_RUN_DIR)" stop; \
|
|
60
|
+
while $(PG_BIN_DIR)/pg_ctl status -D $(PG_PRIMARY_DATA_DIR) > /dev/null 2>&1; do \
|
|
61
|
+
sleep 1; \
|
|
62
|
+
done; \
|
|
63
|
+
fi
|
|
49
64
|
|
|
50
65
|
stop_pg_replica:
|
|
51
|
-
|
|
66
|
+
@if [ -d "$(PG_REPLICA_DATA_DIR)" ] && $(PG_BIN_DIR)/pg_ctl status -D $(PG_REPLICA_DATA_DIR) > /dev/null 2>&1; then \
|
|
67
|
+
$(PG_BIN_DIR)/pg_ctl --silent --log /dev/null -w -D $(PG_REPLICA_DATA_DIR) -o "-p $(PG_REPLICA_PORT)" -o "-k $(PG_REPLICA_RUN_DIR)" stop; \
|
|
68
|
+
while $(PG_BIN_DIR)/pg_ctl status -D $(PG_REPLICA_DATA_DIR) > /dev/null 2>&1; do \
|
|
69
|
+
sleep 1; \
|
|
70
|
+
done; \
|
|
71
|
+
fi
|
|
52
72
|
|
|
53
73
|
cleanup_pg:
|
|
54
74
|
@rm -rf $(PG_PRIMARY_DIR) $(PG_REPLICA_DIR)
|
data/rails_failover.gemspec
CHANGED
|
@@ -27,11 +27,11 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.add_dependency "railties", ">= 6.1", "< 8.0"
|
|
28
28
|
spec.add_dependency "concurrent-ruby"
|
|
29
29
|
|
|
30
|
-
spec.add_development_dependency "rake"
|
|
30
|
+
spec.add_development_dependency "rake"
|
|
31
31
|
spec.add_development_dependency "redis", "~> 4.1"
|
|
32
|
-
spec.add_development_dependency "pg"
|
|
32
|
+
spec.add_development_dependency "pg"
|
|
33
33
|
spec.add_development_dependency "rack"
|
|
34
|
-
spec.add_development_dependency "rspec"
|
|
34
|
+
spec.add_development_dependency "rspec"
|
|
35
35
|
spec.add_development_dependency "byebug"
|
|
36
36
|
spec.add_development_dependency "rubocop-discourse"
|
|
37
37
|
spec.add_development_dependency "syntax_tree"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_failover
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alan Tan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-07-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -68,16 +68,16 @@ dependencies:
|
|
|
68
68
|
name: rake
|
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements:
|
|
71
|
-
- - "
|
|
71
|
+
- - ">="
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
|
-
version: '
|
|
73
|
+
version: '0'
|
|
74
74
|
type: :development
|
|
75
75
|
prerelease: false
|
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
|
78
|
-
- - "
|
|
78
|
+
- - ">="
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '
|
|
80
|
+
version: '0'
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
name: redis
|
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -96,16 +96,16 @@ dependencies:
|
|
|
96
96
|
name: pg
|
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
|
99
|
-
- - "
|
|
99
|
+
- - ">="
|
|
100
100
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: '
|
|
101
|
+
version: '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: '0'
|
|
109
109
|
- !ruby/object:Gem::Dependency
|
|
110
110
|
name: rack
|
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -124,16 +124,16 @@ dependencies:
|
|
|
124
124
|
name: rspec
|
|
125
125
|
requirement: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements:
|
|
127
|
-
- - "
|
|
127
|
+
- - ">="
|
|
128
128
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '
|
|
129
|
+
version: '0'
|
|
130
130
|
type: :development
|
|
131
131
|
prerelease: false
|
|
132
132
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
133
|
requirements:
|
|
134
|
-
- - "
|
|
134
|
+
- - ">="
|
|
135
135
|
- !ruby/object:Gem::Version
|
|
136
|
-
version: '
|
|
136
|
+
version: '0'
|
|
137
137
|
- !ruby/object:Gem::Dependency
|
|
138
138
|
name: byebug
|
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -205,6 +205,7 @@ files:
|
|
|
205
205
|
- CHANGELOG.md
|
|
206
206
|
- CODE_OF_CONDUCT.md
|
|
207
207
|
- Gemfile
|
|
208
|
+
- Gemfile.lock
|
|
208
209
|
- LICENSE.txt
|
|
209
210
|
- README.md
|
|
210
211
|
- Rakefile
|
|
@@ -244,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
244
245
|
- !ruby/object:Gem::Version
|
|
245
246
|
version: '0'
|
|
246
247
|
requirements: []
|
|
247
|
-
rubygems_version: 3.5.
|
|
248
|
+
rubygems_version: 3.5.11
|
|
248
249
|
signing_key:
|
|
249
250
|
specification_version: 4
|
|
250
251
|
summary: Failover for ActiveRecord and Redis
|