litestream-aarch64-linux 0.12.0-aarch64-linux
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 +7 -0
- data/LICENSE +21 -0
- data/LICENSE-DEPENDENCIES +205 -0
- data/README.md +511 -0
- data/Rakefile +14 -0
- data/app/controllers/litestream/application_controller.rb +19 -0
- data/app/controllers/litestream/processes_controller.rb +9 -0
- data/app/controllers/litestream/restorations_controller.rb +17 -0
- data/app/jobs/litestream/verification_job.rb +13 -0
- data/app/views/layouts/litestream/_style.html +804 -0
- data/app/views/layouts/litestream/application.html.erb +56 -0
- data/app/views/litestream/processes/show.html.erb +121 -0
- data/config/routes.rb +6 -0
- data/exe/aarch64-linux/litestream +0 -0
- data/exe/litestream +12 -0
- data/lib/litestream/commands.rb +157 -0
- data/lib/litestream/engine.rb +26 -0
- data/lib/litestream/generators/litestream/install_generator.rb +29 -0
- data/lib/litestream/generators/litestream/templates/config.yml.erb +21 -0
- data/lib/litestream/generators/litestream/templates/initializer.rb +33 -0
- data/lib/litestream/upstream.rb +14 -0
- data/lib/litestream/version.rb +3 -0
- data/lib/litestream.rb +166 -0
- data/lib/puma/plugin/litestream.rb +69 -0
- data/lib/tasks/litestream_tasks.rake +92 -0
- metadata +212 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
require "puma/plugin"
|
2
|
+
|
3
|
+
# Copied from https://github.com/rails/solid_queue/blob/15408647f1780033dad223d3198761ea2e1e983e/lib/puma/plugin/solid_queue.rb
|
4
|
+
Puma::Plugin.create do
|
5
|
+
attr_reader :puma_pid, :litestream_pid, :log_writer
|
6
|
+
|
7
|
+
def start(launcher)
|
8
|
+
@log_writer = launcher.log_writer
|
9
|
+
@puma_pid = $$
|
10
|
+
|
11
|
+
launcher.events.on_booted do
|
12
|
+
@litestream_pid = fork do
|
13
|
+
Thread.new { monitor_puma }
|
14
|
+
Litestream::Commands.replicate(async: true)
|
15
|
+
end
|
16
|
+
|
17
|
+
in_background do
|
18
|
+
monitor_litestream
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
launcher.events.on_stopped { stop_litestream }
|
23
|
+
launcher.events.on_restart { stop_litestream }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def stop_litestream
|
29
|
+
Process.waitpid(litestream_pid, Process::WNOHANG)
|
30
|
+
log_writer.log "Stopping Litestream..."
|
31
|
+
Process.kill(:INT, litestream_pid) if litestream_pid
|
32
|
+
Process.wait(litestream_pid)
|
33
|
+
rescue Errno::ECHILD, Errno::ESRCH
|
34
|
+
end
|
35
|
+
|
36
|
+
def monitor_puma
|
37
|
+
monitor(:puma_dead?, "Detected Puma has gone away, stopping Litestream...")
|
38
|
+
end
|
39
|
+
|
40
|
+
def monitor_litestream
|
41
|
+
monitor(:litestream_dead?, "Detected Litestream has gone away, stopping Puma...")
|
42
|
+
end
|
43
|
+
|
44
|
+
def monitor(process_dead, message)
|
45
|
+
loop do
|
46
|
+
if send(process_dead)
|
47
|
+
log message
|
48
|
+
Process.kill(:INT, $$)
|
49
|
+
break
|
50
|
+
end
|
51
|
+
sleep 2
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def litestream_dead?
|
56
|
+
Process.waitpid(litestream_pid, Process::WNOHANG)
|
57
|
+
false
|
58
|
+
rescue Errno::ECHILD, Errno::ESRCH
|
59
|
+
true
|
60
|
+
end
|
61
|
+
|
62
|
+
def puma_dead?
|
63
|
+
Process.ppid != puma_pid
|
64
|
+
end
|
65
|
+
|
66
|
+
def log(...)
|
67
|
+
log_writer.log(...)
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
namespace :litestream do
|
2
|
+
desc "Print the ENV variables needed for the Litestream config file"
|
3
|
+
task env: :environment do
|
4
|
+
puts "LITESTREAM_REPLICA_BUCKET=#{Litestream.replica_bucket}"
|
5
|
+
puts "LITESTREAM_ACCESS_KEY_ID=#{Litestream.replica_key_id}"
|
6
|
+
puts "LITESTREAM_SECRET_ACCESS_KEY=#{Litestream.replica_access_key}"
|
7
|
+
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Monitor and continuously replicate SQLite databases defined in your config file, for example `rake litestream:replicate -- -exec "foreman start"`'
|
12
|
+
task replicate: :environment do
|
13
|
+
options = {}
|
14
|
+
if (separator_index = ARGV.index("--"))
|
15
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
16
|
+
.map { |pair| pair.split("=") }
|
17
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
18
|
+
end
|
19
|
+
options.symbolize_keys!
|
20
|
+
|
21
|
+
Litestream::Commands.replicate(async: true, **options)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Restore a SQLite database from a Litestream replica, for example `rake litestream:restore -- -database=storage/production.sqlite3`"
|
25
|
+
task restore: :environment do
|
26
|
+
options = {}
|
27
|
+
if (separator_index = ARGV.index("--"))
|
28
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
29
|
+
.map { |pair| pair.split("=") }
|
30
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
31
|
+
end
|
32
|
+
database = options.delete("--database") || options.delete("-database")
|
33
|
+
options.symbolize_keys!
|
34
|
+
|
35
|
+
Litestream::Commands.restore(database, async: true, **options)
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "List all databases and associated replicas in the config file, for example `rake litestream:databases -- -no-expand-env`"
|
39
|
+
task databases: :environment do
|
40
|
+
options = {}
|
41
|
+
if (separator_index = ARGV.index("--"))
|
42
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
43
|
+
.map { |pair| pair.split("=") }
|
44
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
45
|
+
end
|
46
|
+
options.symbolize_keys!
|
47
|
+
|
48
|
+
Litestream::Commands.databases(async: true, **options)
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "List all generations for a database or replica, for example `rake litestream:generations -- -database=storage/production.sqlite3`"
|
52
|
+
task generations: :environment do
|
53
|
+
options = {}
|
54
|
+
if (separator_index = ARGV.index("--"))
|
55
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
56
|
+
.map { |pair| pair.split("=") }
|
57
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
58
|
+
end
|
59
|
+
database = options.delete("--database") || options.delete("-database")
|
60
|
+
options.symbolize_keys!
|
61
|
+
|
62
|
+
Litestream::Commands.generations(database, async: true, **options)
|
63
|
+
end
|
64
|
+
|
65
|
+
desc "List all snapshots for a database or replica, for example `rake litestream:snapshots -- -database=storage/production.sqlite3`"
|
66
|
+
task snapshots: :environment do
|
67
|
+
options = {}
|
68
|
+
if (separator_index = ARGV.index("--"))
|
69
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
70
|
+
.map { |pair| pair.split("=") }
|
71
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
72
|
+
end
|
73
|
+
database = options.delete("--database") || options.delete("-database")
|
74
|
+
options.symbolize_keys!
|
75
|
+
|
76
|
+
Litestream::Commands.snapshots(database, async: true, **options)
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "List all wal files for a database or replica, for example `rake litestream:wal -- -database=storage/production.sqlite3`"
|
80
|
+
task wal: :environment do
|
81
|
+
options = {}
|
82
|
+
if (separator_index = ARGV.index("--"))
|
83
|
+
ARGV.slice(separator_index + 1, ARGV.length)
|
84
|
+
.map { |pair| pair.split("=") }
|
85
|
+
.each { |opt| options[opt[0]] = opt[1] || nil }
|
86
|
+
end
|
87
|
+
database = options.delete("--database") || options.delete("-database")
|
88
|
+
options.symbolize_keys!
|
89
|
+
|
90
|
+
Litestream::Commands.wal(database, async: true, **options)
|
91
|
+
end
|
92
|
+
end
|
metadata
ADDED
@@ -0,0 +1,212 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: litestream-aarch64-linux
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.12.0
|
5
|
+
platform: aarch64-linux
|
6
|
+
authors:
|
7
|
+
- Stephen Margheim
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-12-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: logfmt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.10
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.10
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
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
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: actionpack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '7.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '7.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: actionview
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '7.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '7.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '7.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '7.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activejob
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '7.0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '7.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: railties
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '7.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '7.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubyzip
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: sqlite3
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description:
|
154
|
+
email:
|
155
|
+
- stephen.margheim@gmail.com
|
156
|
+
executables:
|
157
|
+
- litestream
|
158
|
+
extensions: []
|
159
|
+
extra_rdoc_files: []
|
160
|
+
files:
|
161
|
+
- LICENSE
|
162
|
+
- LICENSE-DEPENDENCIES
|
163
|
+
- README.md
|
164
|
+
- Rakefile
|
165
|
+
- app/controllers/litestream/application_controller.rb
|
166
|
+
- app/controllers/litestream/processes_controller.rb
|
167
|
+
- app/controllers/litestream/restorations_controller.rb
|
168
|
+
- app/jobs/litestream/verification_job.rb
|
169
|
+
- app/views/layouts/litestream/_style.html
|
170
|
+
- app/views/layouts/litestream/application.html.erb
|
171
|
+
- app/views/litestream/processes/show.html.erb
|
172
|
+
- config/routes.rb
|
173
|
+
- exe/aarch64-linux/litestream
|
174
|
+
- exe/litestream
|
175
|
+
- lib/litestream.rb
|
176
|
+
- lib/litestream/commands.rb
|
177
|
+
- lib/litestream/engine.rb
|
178
|
+
- lib/litestream/generators/litestream/install_generator.rb
|
179
|
+
- lib/litestream/generators/litestream/templates/config.yml.erb
|
180
|
+
- lib/litestream/generators/litestream/templates/initializer.rb
|
181
|
+
- lib/litestream/upstream.rb
|
182
|
+
- lib/litestream/version.rb
|
183
|
+
- lib/puma/plugin/litestream.rb
|
184
|
+
- lib/tasks/litestream_tasks.rake
|
185
|
+
homepage: https://github.com/fractaledmind/litestream-ruby
|
186
|
+
licenses:
|
187
|
+
- MIT
|
188
|
+
metadata:
|
189
|
+
homepage_uri: https://github.com/fractaledmind/litestream-ruby
|
190
|
+
rubygems_mfa_required: 'true'
|
191
|
+
source_code_uri: https://github.com/fractaledmind/litestream-ruby
|
192
|
+
changelog_uri: https://github.com/fractaledmind/litestream-ruby/CHANGELOG.md
|
193
|
+
post_install_message:
|
194
|
+
rdoc_options: []
|
195
|
+
require_paths:
|
196
|
+
- lib
|
197
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 3.0.0
|
202
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
requirements: []
|
208
|
+
rubygems_version: 3.5.23
|
209
|
+
signing_key:
|
210
|
+
specification_version: 4
|
211
|
+
summary: Integrate Litestream with the RubyGems infrastructure.
|
212
|
+
test_files: []
|