backy_rb 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.backyrc.example +17 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +134 -1
  6. data/README.md +69 -11
  7. data/{backy.gemspec → backy_rb.gemspec} +5 -2
  8. data/bin/backy +4 -0
  9. data/dummy/psql/Gemfile +0 -34
  10. data/lib/backy/cli.rb +88 -0
  11. data/lib/backy/configuration.rb +65 -2
  12. data/lib/backy/db.rb +1 -0
  13. data/lib/backy/list.rb +1 -1
  14. data/lib/backy/logger.rb +27 -0
  15. data/lib/backy/pg_dump.rb +60 -6
  16. data/lib/backy/pg_restore.rb +73 -7
  17. data/lib/backy/version.rb +1 -1
  18. data/lib/{backy.rb → backy_rb.rb} +15 -0
  19. metadata +53 -61
  20. data/dummy/psql/.gitattributes +0 -7
  21. data/dummy/psql/.gitignore +0 -22
  22. data/dummy/psql/.ruby-version +0 -1
  23. data/dummy/psql/Gemfile.lock +0 -207
  24. data/dummy/psql/README.md +0 -24
  25. data/dummy/psql/Rakefile +0 -6
  26. data/dummy/psql/app/assets/config/manifest.js +0 -2
  27. data/dummy/psql/app/assets/images/.keep +0 -0
  28. data/dummy/psql/app/assets/stylesheets/application.css +0 -15
  29. data/dummy/psql/app/controllers/application_controller.rb +0 -2
  30. data/dummy/psql/app/controllers/concerns/.keep +0 -0
  31. data/dummy/psql/app/controllers/posts_controller.rb +0 -59
  32. data/dummy/psql/app/helpers/application_helper.rb +0 -2
  33. data/dummy/psql/app/helpers/posts_helper.rb +0 -2
  34. data/dummy/psql/app/models/application_record.rb +0 -3
  35. data/dummy/psql/app/models/concerns/.keep +0 -0
  36. data/dummy/psql/app/models/post.rb +0 -2
  37. data/dummy/psql/app/views/layouts/application.html.erb +0 -15
  38. data/dummy/psql/app/views/posts/_form.html.erb +0 -27
  39. data/dummy/psql/app/views/posts/_post.html.erb +0 -12
  40. data/dummy/psql/app/views/posts/edit.html.erb +0 -10
  41. data/dummy/psql/app/views/posts/index.html.erb +0 -14
  42. data/dummy/psql/app/views/posts/new.html.erb +0 -9
  43. data/dummy/psql/app/views/posts/show.html.erb +0 -10
  44. data/dummy/psql/bin/bundle +0 -109
  45. data/dummy/psql/bin/rails +0 -4
  46. data/dummy/psql/bin/rake +0 -4
  47. data/dummy/psql/bin/setup +0 -33
  48. data/dummy/psql/config/application.rb +0 -43
  49. data/dummy/psql/config/boot.rb +0 -3
  50. data/dummy/psql/config/credentials.yml.enc +0 -1
  51. data/dummy/psql/config/database.yml +0 -87
  52. data/dummy/psql/config/environment.rb +0 -5
  53. data/dummy/psql/config/environments/development.rb +0 -62
  54. data/dummy/psql/config/environments/production.rb +0 -75
  55. data/dummy/psql/config/environments/test.rb +0 -50
  56. data/dummy/psql/config/locales/en.yml +0 -33
  57. data/dummy/psql/config/master.key +0 -1
  58. data/dummy/psql/config/puma.rb +0 -43
  59. data/dummy/psql/config/routes.rb +0 -7
  60. data/dummy/psql/config.ru +0 -6
  61. data/dummy/psql/db/migrate/20230330203226_create_posts.rb +0 -10
  62. data/dummy/psql/db/schema.rb +0 -23
  63. data/dummy/psql/db/seeds.rb +0 -8
  64. data/dummy/psql/log/.keep +0 -0
  65. data/dummy/psql/public/404.html +0 -67
  66. data/dummy/psql/public/422.html +0 -67
  67. data/dummy/psql/public/500.html +0 -66
  68. data/dummy/psql/public/apple-touch-icon-precomposed.png +0 -0
  69. data/dummy/psql/public/apple-touch-icon.png +0 -0
  70. data/dummy/psql/public/favicon.ico +0 -0
  71. data/dummy/psql/public/robots.txt +0 -1
  72. data/dummy/psql/tmp/.keep +0 -0
  73. data/dummy/psql/tmp/pids/.keep +0 -0
data/lib/backy/pg_dump.rb CHANGED
@@ -1,32 +1,86 @@
1
+ require "fileutils"
2
+ require "etc"
3
+
1
4
  module Backy
2
5
  class PgDump
3
6
  include Db
4
7
  include AppConfig
5
8
 
6
9
  DUMP_DIR = "db/dump"
7
- DUMP_CMD_OPTS = "--no-acl --no-owner --no-subscriptions --no-publications --exclude-table=awsdms_ddl_audit"
10
+ DUMP_CMD_OPTS = "--no-acl --no-owner --no-subscriptions --no-publications"
8
11
 
9
12
  def call
10
13
  FileUtils.mkdir_p(DUMP_DIR)
14
+ Logger.log("Starting backy for #{database}")
15
+
16
+ if use_parallel?
17
+ Logger.log("Using multicore dump with pigz")
18
+ parallel_backup
19
+ else
20
+ Logger.log("Using single core dump")
21
+ plain_text_backup
22
+ end
23
+ end
24
+
25
+ private
11
26
 
12
- dump_file = "#{DUMP_DIR}/#{database}_#{whoami}@#{hostname}_#{Time.zone.now.strftime("%Y%m%d_%H%M%S")}.sql.gz"
27
+ def plain_text_backup
28
+ timestamp = Time.now.strftime("%Y%m%d_%H%M%S")
29
+ dump_file = "#{DUMP_DIR}/#{database}_#{whoami}@#{hostname}_single_#{timestamp}.sql.gz"
13
30
 
14
31
  cmd = "(#{pg_password_env}pg_dump #{pg_credentials} #{database} #{DUMP_CMD_OPTS} | gzip -9 > #{dump_file}) 2>&1 >> #{log_file}"
15
32
 
16
33
  print "Saving to #{dump_file} ... "
17
34
 
18
35
  if system(cmd)
19
- puts "done"
36
+ Logger.success("done")
20
37
  else
21
- puts "error. See #{log_file}"
22
-
38
+ Logger.error("error. See #{log_file}")
23
39
  return
24
40
  end
25
41
 
26
42
  dump_file
27
43
  end
28
44
 
29
- private
45
+ def parallel_backup
46
+ timestamp = Time.now.strftime("%Y%m%d_%H%M%S")
47
+ dump_dir = "#{DUMP_DIR}/#{database}_dump_parallel_#{timestamp}"
48
+ dump_file = "#{dump_dir}.tar.gz"
49
+
50
+ pg_dump_cmd = "pg_dump -Z0 -j #{Etc.nprocessors} -Fd #{database} -f #{dump_dir} #{pg_credentials} #{DUMP_CMD_OPTS}"
51
+ tar_cmd = "tar -cf - #{dump_dir} | pigz -p #{Etc.nprocessors} > #{dump_file}"
52
+ cleanup_cmd = "rm -rf #{dump_dir}"
53
+
54
+ Logger.log("Running pg_dump #{database}")
55
+ if system("#{pg_password_env}#{pg_dump_cmd} 2>&1 >> #{log_file}")
56
+ Logger.log("pg_dump completed successfully.")
57
+ else
58
+ Logger.error("pg_dump failed. See #{log_file} for details.")
59
+ return
60
+ end
61
+
62
+ # Execute tar command
63
+ Logger.log("Compressing #{dump_dir}")
64
+ if system(tar_cmd)
65
+ Logger.log("Compression completed successfully.")
66
+ else
67
+ Logger.error("Compression failed. See #{log_file} for details.")
68
+ return
69
+ end
70
+
71
+ # Execute cleanup command
72
+ Logger.log("Cleaning up #{dump_dir}")
73
+ if system(cleanup_cmd)
74
+ Logger.log("Cleanup completed successfully.")
75
+ else
76
+ Logger.error("Cleanup failed. See #{log_file} for details.")
77
+ return
78
+ end
79
+
80
+ Logger.success("Backup process completed. Output file: #{dump_file}")
81
+
82
+ dump_file # Return the name of the dump file
83
+ end
30
84
 
31
85
  def hostname
32
86
  @hostname ||= `hostname`.strip
@@ -3,25 +3,91 @@ module Backy
3
3
  include Db
4
4
  include AppConfig
5
5
 
6
+ DUMP_DIR = "db/dump"
7
+
6
8
  def initialize(file_name:)
7
9
  @file_name = file_name
8
10
  end
9
11
 
10
12
  def call
11
- terminate_connection_sql = "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{database}' AND pid <> pg_backend_pid();"
12
- cmd = "(#{pg_password_env}psql -c \"#{terminate_connection_sql};\" #{pg_credentials} #{database}; #{pg_password_env}dropdb #{pg_credentials} #{database}; #{pg_password_env}createdb #{pg_credentials} #{database}; gunzip -c #{file_name} | #{pg_password_env}psql #{pg_credentials} -q -d #{database}) 2>&1 >> #{log_file}"
13
+ pigz_installed = system('which pigz > /dev/null 2>&1')
14
+ multicore = Etc.nprocessors > 1
15
+ use_multicore = ENV["BACKY_USE_PARALLEL"] == "true"
13
16
 
14
- print "Restoring #{database} from #{file_name} ... "
15
-
16
- if system(cmd)
17
- puts "done"
17
+ if pigz_installed && multicore && use_multicore
18
+ log_message('Using parallel restore with pigz')
19
+ parallel_restore
18
20
  else
19
- puts "error. See #{log_file}"
21
+ log_message("Pigz not installed or system is not multicore")
22
+ log_message('Using plain text restore')
23
+ plain_text_restore
20
24
  end
21
25
  end
22
26
 
23
27
  private
24
28
 
25
29
  attr_reader :file_name
30
+
31
+ def plain_text_restore
32
+ cmd = "(#{pg_password_env}psql -c \"#{terminate_connection_sql};\" #{pg_credentials} #{database}; #{pg_password_env}dropdb #{pg_credentials} #{database}; #{pg_password_env}createdb #{pg_credentials} #{database}; gunzip -c #{file_name} | #{pg_password_env}psql #{pg_credentials} -q -d #{database}) 2>&1 >> #{log_file}"
33
+
34
+ log_message("Restoring #{database} from #{file_name} ...")
35
+ if system(cmd)
36
+ log_message("Database restoration completed successfully.")
37
+ else
38
+ log_message("Database restoration failed. See #{log_file} for details.")
39
+ end
40
+ end
41
+
42
+ def parallel_restore
43
+ timestamp = Time.now.strftime("%Y%m%d_%H%M%S")
44
+ dump_dir = "#{DUMP_DIR}/#{database}_dump_#{timestamp}"
45
+ FileUtils.mkdir_p(dump_dir)
46
+
47
+ decompress_cmd = "pigz -p #{Etc.nprocessors} -dc #{file_name} | tar -C #{dump_dir} --strip-components 3 -xf -"
48
+ restore_cmd = "pg_restore -j #{Etc.nprocessors} -Fd -O -d #{database} #{dump_dir}"
49
+
50
+ # Terminate connections and drop/create database
51
+ terminate_and_recreate_db = "(#{pg_password_env}psql -c \"#{terminate_connection_sql};\" #{pg_credentials} #{database}; #{pg_password_env}dropdb #{pg_credentials} #{database}; #{pg_password_env}createdb #{pg_credentials} #{database}) 2>&1 >> #{log_file}"
52
+
53
+ log_message("Terminating connections to #{database}")
54
+ if system(terminate_and_recreate_db)
55
+ log_message("Database connections terminated and database recreated.")
56
+ else
57
+ log_message("Error during database termination and recreation. See #{log_file}")
58
+ return
59
+ end
60
+
61
+ # Decompress and restore
62
+ log_message("Decompressing #{file_name} into #{dump_dir} ...")
63
+ if system(decompress_cmd)
64
+ log_message("Decompression completed successfully.")
65
+
66
+ # Check the expected file
67
+ unless File.exist?("#{dump_dir}/toc.dat")
68
+ log_message("toc.dat not found in #{dump_dir}.")
69
+ return
70
+ end
71
+ else
72
+ log_message("Decompression failed. See #{log_file} for details.")
73
+ return
74
+ end
75
+
76
+ log_message("Restoring database from #{dump_dir} ...")
77
+ if system(restore_cmd)
78
+ log_message("Database restoration completed successfully.")
79
+ else
80
+ log_message("Database restoration failed. See #{log_file} for details.")
81
+ return
82
+ end
83
+
84
+ log_message("Cleanup: Removing #{dump_dir} ...")
85
+ FileUtils.rm_rf(dump_dir)
86
+ log_message("Cleanup completed.")
87
+ end
88
+
89
+ def terminate_connection_sql
90
+ "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{database}' AND pid <> pg_backend_pid();"
91
+ end
26
92
  end
27
93
  end
data/lib/backy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Backy
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,12 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support"
3
4
  require "active_support/core_ext/integer/time"
4
5
  require "active_support/core_ext/object/blank"
5
6
 
7
+ require_relative "backy/cli"
6
8
  require_relative "backy/configuration"
7
9
  require_relative "backy/app_config"
8
10
  require_relative "backy/db"
9
11
  require_relative "backy/list"
12
+ require_relative "backy/logger"
10
13
  require_relative "backy/pg_dump"
11
14
  require_relative "backy/pg_restore"
12
15
  require_relative "backy/s3"
@@ -27,4 +30,16 @@ module Backy
27
30
  def self.configuration
28
31
  @configuration ||= Configuration.new
29
32
  end
33
+
34
+ def self.setup
35
+ Logger.log("Setting up Backy...")
36
+ configuration.load
37
+ setup_logging
38
+ end
39
+
40
+ def self.setup_logging
41
+ log_file = configuration.log_file
42
+ log_dir = File.dirname(log_file)
43
+ FileUtils.mkdir_p(log_dir) unless Dir.exist?(log_dir)
44
+ end
30
45
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backy_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Kharchenko
8
8
  - Martin Ulleberg
9
9
  - Pål André Sundt
10
10
  autorequire:
11
- bindir: exe
11
+ bindir: bin
12
12
  cert_chain: []
13
- date: 2023-06-16 00:00:00.000000000 Z
13
+ date: 2023-12-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -124,6 +124,48 @@ dependencies:
124
124
  - - "~>"
125
125
  - !ruby/object:Gem::Version
126
126
  version: 0.9.6
127
+ - !ruby/object:Gem::Dependency
128
+ name: zlib
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '3.0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '3.0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rails
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '4.0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '4.0'
155
+ - !ruby/object:Gem::Dependency
156
+ name: faker
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '3.1'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '3.1'
127
169
  - !ruby/object:Gem::Dependency
128
170
  name: activerecord
129
171
  requirement: !ruby/object:Gem::Requirement
@@ -173,10 +215,12 @@ email:
173
215
  - akharchenko@gmail.com
174
216
  - martin.ulleberg@gmail.com
175
217
  - pal@rubynor.com
176
- executables: []
218
+ executables:
219
+ - backy
177
220
  extensions: []
178
221
  extra_rdoc_files: []
179
222
  files:
223
+ - ".backyrc.example"
180
224
  - ".drone.yml"
181
225
  - ".idea/.gitignore"
182
226
  - ".rspec"
@@ -186,70 +230,17 @@ files:
186
230
  - Gemfile.lock
187
231
  - README.md
188
232
  - Rakefile
189
- - backy.gemspec
233
+ - backy_rb.gemspec
234
+ - bin/backy
190
235
  - bucky.png
191
236
  - config/database.example.yml
192
- - dummy/psql/.gitattributes
193
- - dummy/psql/.gitignore
194
- - dummy/psql/.ruby-version
195
237
  - dummy/psql/Gemfile
196
- - dummy/psql/Gemfile.lock
197
- - dummy/psql/README.md
198
- - dummy/psql/Rakefile
199
- - dummy/psql/app/assets/config/manifest.js
200
- - dummy/psql/app/assets/images/.keep
201
- - dummy/psql/app/assets/stylesheets/application.css
202
- - dummy/psql/app/controllers/application_controller.rb
203
- - dummy/psql/app/controllers/concerns/.keep
204
- - dummy/psql/app/controllers/posts_controller.rb
205
- - dummy/psql/app/helpers/application_helper.rb
206
- - dummy/psql/app/helpers/posts_helper.rb
207
- - dummy/psql/app/models/application_record.rb
208
- - dummy/psql/app/models/concerns/.keep
209
- - dummy/psql/app/models/post.rb
210
- - dummy/psql/app/views/layouts/application.html.erb
211
- - dummy/psql/app/views/posts/_form.html.erb
212
- - dummy/psql/app/views/posts/_post.html.erb
213
- - dummy/psql/app/views/posts/edit.html.erb
214
- - dummy/psql/app/views/posts/index.html.erb
215
- - dummy/psql/app/views/posts/new.html.erb
216
- - dummy/psql/app/views/posts/show.html.erb
217
- - dummy/psql/bin/bundle
218
- - dummy/psql/bin/rails
219
- - dummy/psql/bin/rake
220
- - dummy/psql/bin/setup
221
- - dummy/psql/config.ru
222
- - dummy/psql/config/application.rb
223
- - dummy/psql/config/boot.rb
224
- - dummy/psql/config/credentials.yml.enc
225
- - dummy/psql/config/database.yml
226
- - dummy/psql/config/environment.rb
227
- - dummy/psql/config/environments/development.rb
228
- - dummy/psql/config/environments/production.rb
229
- - dummy/psql/config/environments/test.rb
230
- - dummy/psql/config/locales/en.yml
231
- - dummy/psql/config/master.key
232
- - dummy/psql/config/puma.rb
233
- - dummy/psql/config/routes.rb
234
- - dummy/psql/db/migrate/20230330203226_create_posts.rb
235
- - dummy/psql/db/schema.rb
236
- - dummy/psql/db/seeds.rb
237
- - dummy/psql/log/.keep
238
- - dummy/psql/public/404.html
239
- - dummy/psql/public/422.html
240
- - dummy/psql/public/500.html
241
- - dummy/psql/public/apple-touch-icon-precomposed.png
242
- - dummy/psql/public/apple-touch-icon.png
243
- - dummy/psql/public/favicon.ico
244
- - dummy/psql/public/robots.txt
245
- - dummy/psql/tmp/.keep
246
- - dummy/psql/tmp/pids/.keep
247
- - lib/backy.rb
248
238
  - lib/backy/app_config.rb
249
239
  - lib/backy/cli.rb
250
240
  - lib/backy/configuration.rb
251
241
  - lib/backy/db.rb
252
242
  - lib/backy/list.rb
243
+ - lib/backy/logger.rb
253
244
  - lib/backy/pg_dump.rb
254
245
  - lib/backy/pg_restore.rb
255
246
  - lib/backy/railtie.rb
@@ -258,6 +249,7 @@ files:
258
249
  - lib/backy/s3_load.rb
259
250
  - lib/backy/s3_save.rb
260
251
  - lib/backy/version.rb
252
+ - lib/backy_rb.rb
261
253
  - lib/tasks/backy_tasks.rake
262
254
  homepage: https://rubynor.com
263
255
  licenses: []
@@ -280,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
272
  - !ruby/object:Gem::Version
281
273
  version: '0'
282
274
  requirements: []
283
- rubygems_version: 3.4.1
275
+ rubygems_version: 3.4.22
284
276
  signing_key:
285
277
  specification_version: 4
286
278
  summary: Backy is a powerful and user-friendly database backup gem designed specifically
@@ -1,7 +0,0 @@
1
- # See https://git-scm.com/docs/gitattributes for more about git attribute files.
2
-
3
- # Mark the database schema as having been generated.
4
- db/schema.rb linguist-generated
5
-
6
- # Mark any vendored files as having been vendored.
7
- vendor/* linguist-vendored
@@ -1,22 +0,0 @@
1
- # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
- #
3
- # If you find yourself ignoring temporary files generated by your text editor
4
- # or operating system, you probably want to add a global ignore instead:
5
- # git config --global core.excludesfile '~/.gitignore_global'
6
-
7
- # Ignore bundler config.
8
- /.bundle
9
-
10
- # Ignore all logfiles and tempfiles.
11
- /log/*
12
- /tmp/*
13
- !/log/.keep
14
- !/tmp/.keep
15
-
16
- # Ignore pidfiles, but keep the directory.
17
- /tmp/pids/*
18
- !/tmp/pids/
19
- !/tmp/pids/.keep
20
-
21
-
22
- /public/assets
@@ -1 +0,0 @@
1
- ruby-3.2.0
@@ -1,207 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- backy (0.1.3)
5
- activerecord (>= 4.0)
6
- activesupport (>= 4.0)
7
- aws-sdk-s3 (>= 1.117)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actioncable (7.0.4.3)
13
- actionpack (= 7.0.4.3)
14
- activesupport (= 7.0.4.3)
15
- nio4r (~> 2.0)
16
- websocket-driver (>= 0.6.1)
17
- actionmailbox (7.0.4.3)
18
- actionpack (= 7.0.4.3)
19
- activejob (= 7.0.4.3)
20
- activerecord (= 7.0.4.3)
21
- activestorage (= 7.0.4.3)
22
- activesupport (= 7.0.4.3)
23
- mail (>= 2.7.1)
24
- net-imap
25
- net-pop
26
- net-smtp
27
- actionmailer (7.0.4.3)
28
- actionpack (= 7.0.4.3)
29
- actionview (= 7.0.4.3)
30
- activejob (= 7.0.4.3)
31
- activesupport (= 7.0.4.3)
32
- mail (~> 2.5, >= 2.5.4)
33
- net-imap
34
- net-pop
35
- net-smtp
36
- rails-dom-testing (~> 2.0)
37
- actionpack (7.0.4.3)
38
- actionview (= 7.0.4.3)
39
- activesupport (= 7.0.4.3)
40
- rack (~> 2.0, >= 2.2.0)
41
- rack-test (>= 0.6.3)
42
- rails-dom-testing (~> 2.0)
43
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
44
- actiontext (7.0.4.3)
45
- actionpack (= 7.0.4.3)
46
- activerecord (= 7.0.4.3)
47
- activestorage (= 7.0.4.3)
48
- activesupport (= 7.0.4.3)
49
- globalid (>= 0.6.0)
50
- nokogiri (>= 1.8.5)
51
- actionview (7.0.4.3)
52
- activesupport (= 7.0.4.3)
53
- builder (~> 3.1)
54
- erubi (~> 1.4)
55
- rails-dom-testing (~> 2.0)
56
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
57
- activejob (7.0.4.3)
58
- activesupport (= 7.0.4.3)
59
- globalid (>= 0.3.6)
60
- activemodel (7.0.4.3)
61
- activesupport (= 7.0.4.3)
62
- activerecord (7.0.4.3)
63
- activemodel (= 7.0.4.3)
64
- activesupport (= 7.0.4.3)
65
- activestorage (7.0.4.3)
66
- actionpack (= 7.0.4.3)
67
- activejob (= 7.0.4.3)
68
- activerecord (= 7.0.4.3)
69
- activesupport (= 7.0.4.3)
70
- marcel (~> 1.0)
71
- mini_mime (>= 1.1.0)
72
- activesupport (7.0.4.3)
73
- concurrent-ruby (~> 1.0, >= 1.0.2)
74
- i18n (>= 1.6, < 2)
75
- minitest (>= 5.1)
76
- tzinfo (~> 2.0)
77
- aws-eventstream (1.2.0)
78
- aws-partitions (1.779.0)
79
- aws-sdk-core (3.174.0)
80
- aws-eventstream (~> 1, >= 1.0.2)
81
- aws-partitions (~> 1, >= 1.651.0)
82
- aws-sigv4 (~> 1.5)
83
- jmespath (~> 1, >= 1.6.1)
84
- aws-sdk-kms (1.66.0)
85
- aws-sdk-core (~> 3, >= 3.174.0)
86
- aws-sigv4 (~> 1.1)
87
- aws-sdk-s3 (1.124.0)
88
- aws-sdk-core (~> 3, >= 3.174.0)
89
- aws-sdk-kms (~> 1)
90
- aws-sigv4 (~> 1.4)
91
- aws-sigv4 (1.5.2)
92
- aws-eventstream (~> 1, >= 1.0.2)
93
- builder (3.2.4)
94
- concurrent-ruby (1.2.2)
95
- crass (1.0.6)
96
- date (3.3.3)
97
- debug (1.7.2)
98
- irb (>= 1.5.0)
99
- reline (>= 0.3.1)
100
- erubi (1.12.0)
101
- faker (3.1.1)
102
- i18n (>= 1.8.11, < 2)
103
- globalid (1.1.0)
104
- activesupport (>= 5.0)
105
- i18n (1.12.0)
106
- concurrent-ruby (~> 1.0)
107
- io-console (0.6.0)
108
- irb (1.6.3)
109
- reline (>= 0.3.0)
110
- jmespath (1.6.2)
111
- loofah (2.19.1)
112
- crass (~> 1.0.2)
113
- nokogiri (>= 1.5.9)
114
- mail (2.8.1)
115
- mini_mime (>= 0.1.1)
116
- net-imap
117
- net-pop
118
- net-smtp
119
- marcel (1.0.2)
120
- method_source (1.0.0)
121
- mini_mime (1.1.2)
122
- minitest (5.18.0)
123
- net-imap (0.3.4)
124
- date
125
- net-protocol
126
- net-pop (0.1.2)
127
- net-protocol
128
- net-protocol (0.2.1)
129
- timeout
130
- net-smtp (0.3.3)
131
- net-protocol
132
- nio4r (2.5.8)
133
- nokogiri (1.14.2-arm64-darwin)
134
- racc (~> 1.4)
135
- nokogiri (1.14.2-x86_64-linux)
136
- racc (~> 1.4)
137
- pg (1.4.6)
138
- puma (5.6.5)
139
- nio4r (~> 2.0)
140
- racc (1.6.2)
141
- rack (2.2.6.4)
142
- rack-test (2.1.0)
143
- rack (>= 1.3)
144
- rails (7.0.4.3)
145
- actioncable (= 7.0.4.3)
146
- actionmailbox (= 7.0.4.3)
147
- actionmailer (= 7.0.4.3)
148
- actionpack (= 7.0.4.3)
149
- actiontext (= 7.0.4.3)
150
- actionview (= 7.0.4.3)
151
- activejob (= 7.0.4.3)
152
- activemodel (= 7.0.4.3)
153
- activerecord (= 7.0.4.3)
154
- activestorage (= 7.0.4.3)
155
- activesupport (= 7.0.4.3)
156
- bundler (>= 1.15.0)
157
- railties (= 7.0.4.3)
158
- rails-dom-testing (2.0.3)
159
- activesupport (>= 4.2.0)
160
- nokogiri (>= 1.6)
161
- rails-html-sanitizer (1.5.0)
162
- loofah (~> 2.19, >= 2.19.1)
163
- railties (7.0.4.3)
164
- actionpack (= 7.0.4.3)
165
- activesupport (= 7.0.4.3)
166
- method_source
167
- rake (>= 12.2)
168
- thor (~> 1.0)
169
- zeitwerk (~> 2.5)
170
- rake (13.0.6)
171
- reline (0.3.3)
172
- io-console (~> 0.5)
173
- sprockets (4.2.0)
174
- concurrent-ruby (~> 1.0)
175
- rack (>= 2.2.4, < 4)
176
- sprockets-rails (3.4.2)
177
- actionpack (>= 5.2)
178
- activesupport (>= 5.2)
179
- sprockets (>= 3.0.0)
180
- thor (1.2.1)
181
- timeout (0.3.2)
182
- tzinfo (2.0.6)
183
- concurrent-ruby (~> 1.0)
184
- websocket-driver (0.7.5)
185
- websocket-extensions (>= 0.1.0)
186
- websocket-extensions (0.1.5)
187
- zeitwerk (2.6.7)
188
-
189
- PLATFORMS
190
- arm64-darwin-22
191
- x86_64-linux
192
-
193
- DEPENDENCIES
194
- backy!
195
- debug
196
- faker (~> 3.1)
197
- pg (~> 1.1)
198
- puma (~> 5.0)
199
- rails (~> 7.0.4, >= 7.0.4.2)
200
- sprockets-rails
201
- tzinfo-data
202
-
203
- RUBY VERSION
204
- ruby 3.2.0p0
205
-
206
- BUNDLED WITH
207
- 2.4.8
data/dummy/psql/README.md DELETED
@@ -1,24 +0,0 @@
1
- # README
2
-
3
- This README would normally document whatever steps are necessary to get the
4
- application up and running.
5
-
6
- Things you may want to cover:
7
-
8
- * Ruby version
9
-
10
- * System dependencies
11
-
12
- * Configuration
13
-
14
- * Database creation
15
-
16
- * Database initialization
17
-
18
- * How to run the test suite
19
-
20
- * Services (job queues, cache servers, search engines, etc.)
21
-
22
- * Deployment instructions
23
-
24
- * ...
data/dummy/psql/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
-
4
- require_relative "config/application"
5
-
6
- Rails.application.load_tasks
@@ -1,2 +0,0 @@
1
- //= link_tree ../images
2
- //= link_directory ../stylesheets .css
File without changes