active_cached_resource 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/LICENSE +21 -0
- data/lib/active_cached_resource/caching.rb +104 -1
- data/lib/active_cached_resource/configuration.rb +22 -1
- data/lib/active_cached_resource/logger.rb +14 -0
- data/lib/active_cached_resource/model.rb +18 -0
- data/lib/active_cached_resource/version.rb +1 -8
- metadata +2 -308
- data/.rspec +0 -3
- data/.rubocop.yml +0 -23
- data/.standard.yml +0 -2
- data/Rakefile +0 -29
- data/example/consumer/.dockerignore +0 -41
- data/example/consumer/.gitattributes +0 -9
- data/example/consumer/.gitignore +0 -36
- data/example/consumer/.kamal/hooks/docker-setup.sample +0 -3
- data/example/consumer/.kamal/hooks/post-deploy.sample +0 -14
- data/example/consumer/.kamal/hooks/post-proxy-reboot.sample +0 -3
- data/example/consumer/.kamal/hooks/pre-build.sample +0 -51
- data/example/consumer/.kamal/hooks/pre-connect.sample +0 -47
- data/example/consumer/.kamal/hooks/pre-deploy.sample +0 -109
- data/example/consumer/.kamal/hooks/pre-proxy-reboot.sample +0 -3
- data/example/consumer/.kamal/secrets +0 -17
- data/example/consumer/Dockerfile +0 -65
- data/example/consumer/Gemfile +0 -17
- data/example/consumer/Rakefile +0 -6
- data/example/consumer/app/controllers/application_controller.rb +0 -2
- data/example/consumer/app/controllers/concerns/.keep +0 -0
- data/example/consumer/app/jobs/application_job.rb +0 -7
- data/example/consumer/app/mailers/application_mailer.rb +0 -4
- data/example/consumer/app/models/application_record.rb +0 -3
- data/example/consumer/app/models/concerns/.keep +0 -0
- data/example/consumer/app/models/person.rb +0 -9
- data/example/consumer/app/views/layouts/mailer.html.erb +0 -13
- data/example/consumer/app/views/layouts/mailer.text.erb +0 -1
- data/example/consumer/bin/brakeman +0 -7
- data/example/consumer/bin/bundle +0 -109
- data/example/consumer/bin/dev +0 -2
- data/example/consumer/bin/docker-entrypoint +0 -14
- data/example/consumer/bin/jobs +0 -6
- data/example/consumer/bin/kamal +0 -27
- data/example/consumer/bin/rails +0 -4
- data/example/consumer/bin/rake +0 -4
- data/example/consumer/bin/rubocop +0 -8
- data/example/consumer/bin/setup +0 -34
- data/example/consumer/bin/thrust +0 -5
- data/example/consumer/config/application.rb +0 -20
- data/example/consumer/config/boot.rb +0 -3
- data/example/consumer/config/cache.yml +0 -16
- data/example/consumer/config/credentials.yml.enc +0 -1
- data/example/consumer/config/database.yml +0 -14
- data/example/consumer/config/deploy.yml +0 -116
- data/example/consumer/config/environment.rb +0 -5
- data/example/consumer/config/environments/development.rb +0 -64
- data/example/consumer/config/environments/production.rb +0 -85
- data/example/consumer/config/environments/test.rb +0 -50
- data/example/consumer/config/initializers/cors.rb +0 -16
- data/example/consumer/config/initializers/filter_parameter_logging.rb +0 -8
- data/example/consumer/config/initializers/inflections.rb +0 -16
- data/example/consumer/config/locales/en.yml +0 -31
- data/example/consumer/config/puma.rb +0 -41
- data/example/consumer/config/queue.yml +0 -18
- data/example/consumer/config/recurring.yml +0 -10
- data/example/consumer/config/routes.rb +0 -10
- data/example/consumer/config.ru +0 -6
- data/example/consumer/db/cache_schema.rb +0 -14
- data/example/consumer/db/queue_schema.rb +0 -129
- data/example/consumer/db/seeds.rb +0 -0
- data/example/consumer/lib/tasks/.keep +0 -0
- data/example/consumer/log/.keep +0 -0
- data/example/consumer/public/robots.txt +0 -1
- data/example/consumer/script/.keep +0 -0
- data/example/consumer/storage/.keep +0 -0
- data/example/consumer/tmp/.keep +0 -0
- data/example/consumer/tmp/cache/.keep +0 -0
- data/example/consumer/tmp/pids/.keep +0 -0
- data/example/consumer/tmp/storage/.keep +0 -0
- data/example/consumer/vendor/.keep +0 -0
- data/example/provider/.dockerignore +0 -41
- data/example/provider/.gitattributes +0 -9
- data/example/provider/.gitignore +0 -32
- data/example/provider/.kamal/hooks/docker-setup.sample +0 -3
- data/example/provider/.kamal/hooks/post-deploy.sample +0 -14
- data/example/provider/.kamal/hooks/post-proxy-reboot.sample +0 -3
- data/example/provider/.kamal/hooks/pre-build.sample +0 -51
- data/example/provider/.kamal/hooks/pre-connect.sample +0 -47
- data/example/provider/.kamal/hooks/pre-deploy.sample +0 -109
- data/example/provider/.kamal/hooks/pre-proxy-reboot.sample +0 -3
- data/example/provider/.kamal/secrets +0 -17
- data/example/provider/Dockerfile +0 -65
- data/example/provider/Gemfile +0 -14
- data/example/provider/Rakefile +0 -6
- data/example/provider/app/controllers/application_controller.rb +0 -2
- data/example/provider/app/controllers/concerns/.keep +0 -0
- data/example/provider/app/controllers/people_controller.rb +0 -68
- data/example/provider/app/jobs/application_job.rb +0 -7
- data/example/provider/app/mailers/application_mailer.rb +0 -4
- data/example/provider/app/models/address.rb +0 -3
- data/example/provider/app/models/application_record.rb +0 -3
- data/example/provider/app/models/company.rb +0 -3
- data/example/provider/app/models/concerns/.keep +0 -0
- data/example/provider/app/models/person.rb +0 -6
- data/example/provider/app/views/layouts/mailer.html.erb +0 -13
- data/example/provider/app/views/layouts/mailer.text.erb +0 -1
- data/example/provider/bin/brakeman +0 -7
- data/example/provider/bin/bundle +0 -109
- data/example/provider/bin/dev +0 -2
- data/example/provider/bin/docker-entrypoint +0 -14
- data/example/provider/bin/jobs +0 -6
- data/example/provider/bin/kamal +0 -27
- data/example/provider/bin/rails +0 -4
- data/example/provider/bin/rake +0 -4
- data/example/provider/bin/rubocop +0 -8
- data/example/provider/bin/setup +0 -34
- data/example/provider/bin/thrust +0 -5
- data/example/provider/config/application.rb +0 -44
- data/example/provider/config/boot.rb +0 -3
- data/example/provider/config/cache.yml +0 -16
- data/example/provider/config/credentials.yml.enc +0 -1
- data/example/provider/config/database.yml +0 -20
- data/example/provider/config/deploy.yml +0 -116
- data/example/provider/config/environment.rb +0 -5
- data/example/provider/config/environments/development.rb +0 -64
- data/example/provider/config/environments/production.rb +0 -85
- data/example/provider/config/environments/test.rb +0 -50
- data/example/provider/config/initializers/cors.rb +0 -16
- data/example/provider/config/initializers/filter_parameter_logging.rb +0 -8
- data/example/provider/config/initializers/inflections.rb +0 -16
- data/example/provider/config/locales/en.yml +0 -31
- data/example/provider/config/puma.rb +0 -41
- data/example/provider/config/queue.yml +0 -18
- data/example/provider/config/recurring.yml +0 -10
- data/example/provider/config/routes.rb +0 -4
- data/example/provider/config.ru +0 -6
- data/example/provider/db/cache_schema.rb +0 -14
- data/example/provider/db/migrate/20241202183937_create_people.rb +0 -11
- data/example/provider/db/migrate/20241202183955_create_addresses.rb +0 -13
- data/example/provider/db/migrate/20241202184017_create_companies.rb +0 -14
- data/example/provider/db/queue_schema.rb +0 -129
- data/example/provider/db/schema.rb +0 -47
- data/example/provider/db/seeds.rb +0 -18
- data/example/provider/lib/tasks/.keep +0 -0
- data/example/provider/log/.keep +0 -0
- data/example/provider/public/robots.txt +0 -1
- data/example/provider/script/.keep +0 -0
- data/example/provider/storage/.keep +0 -0
- data/example/provider/tmp/.keep +0 -0
- data/example/provider/tmp/pids/.keep +0 -0
- data/example/provider/tmp/storage/.keep +0 -0
- data/example/provider/vendor/.keep +0 -0
- data/lib/activeresource/.gitignore +0 -15
- data/lib/activeresource/examples/performance.rb +0 -72
- data/lib/activeresource/test/abstract_unit.rb +0 -154
- data/lib/activeresource/test/cases/active_job_serializer_test.rb +0 -53
- data/lib/activeresource/test/cases/association_test.rb +0 -104
- data/lib/activeresource/test/cases/associations/builder/belongs_to_test.rb +0 -42
- data/lib/activeresource/test/cases/associations/builder/has_many_test.rb +0 -28
- data/lib/activeresource/test/cases/associations/builder/has_one_test.rb +0 -28
- data/lib/activeresource/test/cases/authorization_test.rb +0 -276
- data/lib/activeresource/test/cases/base/custom_methods_test.rb +0 -155
- data/lib/activeresource/test/cases/base/equality_test.rb +0 -53
- data/lib/activeresource/test/cases/base/load_test.rb +0 -249
- data/lib/activeresource/test/cases/base/schema_test.rb +0 -428
- data/lib/activeresource/test/cases/base_errors_test.rb +0 -129
- data/lib/activeresource/test/cases/base_test.rb +0 -1622
- data/lib/activeresource/test/cases/callbacks_test.rb +0 -155
- data/lib/activeresource/test/cases/collection_test.rb +0 -196
- data/lib/activeresource/test/cases/connection_test.rb +0 -357
- data/lib/activeresource/test/cases/finder_test.rb +0 -217
- data/lib/activeresource/test/cases/format_test.rb +0 -137
- data/lib/activeresource/test/cases/http_mock_test.rb +0 -213
- data/lib/activeresource/test/cases/inheritence_test.rb +0 -19
- data/lib/activeresource/test/cases/inheriting_hash_test.rb +0 -25
- data/lib/activeresource/test/cases/log_subscriber_test.rb +0 -64
- data/lib/activeresource/test/cases/reflection_test.rb +0 -65
- data/lib/activeresource/test/cases/validations_test.rb +0 -78
- data/lib/activeresource/test/fixtures/address.rb +0 -20
- data/lib/activeresource/test/fixtures/beast.rb +0 -16
- data/lib/activeresource/test/fixtures/comment.rb +0 -5
- data/lib/activeresource/test/fixtures/customer.rb +0 -5
- data/lib/activeresource/test/fixtures/fixtures.rbi +0 -46
- data/lib/activeresource/test/fixtures/inventory.rb +0 -14
- data/lib/activeresource/test/fixtures/person.rb +0 -15
- data/lib/activeresource/test/fixtures/pet.rb +0 -6
- data/lib/activeresource/test/fixtures/post.rb +0 -5
- data/lib/activeresource/test/fixtures/product.rb +0 -11
- data/lib/activeresource/test/fixtures/project.rb +0 -19
- data/lib/activeresource/test/fixtures/proxy.rb +0 -6
- data/lib/activeresource/test/fixtures/sound.rb +0 -11
- data/lib/activeresource/test/fixtures/street_address.rb +0 -6
- data/lib/activeresource/test/fixtures/subscription_plan.rb +0 -7
- data/lib/activeresource/test/fixtures/weather.rb +0 -21
- data/lib/activeresource/test/setter_trap.rb +0 -28
- data/lib/activeresource/test/singleton_test.rb +0 -138
- data/lib/activeresource/test/threadsafe_attributes_test.rb +0 -91
- data/sorbet/config +0 -6
- data/sorbet/rbi/annotations/.gitattributes +0 -1
- data/sorbet/rbi/annotations/activemodel.rbi +0 -89
- data/sorbet/rbi/annotations/activesupport.rbi +0 -457
- data/sorbet/rbi/annotations/minitest.rbi +0 -119
- data/sorbet/rbi/annotations/rainbow.rbi +0 -269
- data/sorbet/rbi/dsl/.gitattributes +0 -1
- data/sorbet/rbi/dsl/active_support/callbacks.rbi +0 -21
- data/sorbet/rbi/gems/.gitattributes +0 -1
- data/sorbet/rbi/gems/actioncable@8.0.1.rbi +0 -252
- data/sorbet/rbi/gems/actionmailbox@8.0.1.rbi +0 -9
- data/sorbet/rbi/gems/actionmailer@8.0.1.rbi +0 -9
- data/sorbet/rbi/gems/actionpack@8.0.1.rbi +0 -21111
- data/sorbet/rbi/gems/actiontext@8.0.1.rbi +0 -9
- data/sorbet/rbi/gems/actionview@8.0.1.rbi +0 -16409
- data/sorbet/rbi/gems/activejob@8.0.1.rbi +0 -90
- data/sorbet/rbi/gems/activemodel-serializers-xml@1.0.3.rbi +0 -166
- data/sorbet/rbi/gems/activemodel@8.0.1.rbi +0 -6865
- data/sorbet/rbi/gems/activerecord@8.0.1.rbi +0 -43277
- data/sorbet/rbi/gems/activestorage@8.0.1.rbi +0 -9
- data/sorbet/rbi/gems/activesupport@8.0.1.rbi +0 -21426
- data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -585
- data/sorbet/rbi/gems/base64@0.2.0.rbi +0 -509
- data/sorbet/rbi/gems/benchmark@0.4.0.rbi +0 -618
- data/sorbet/rbi/gems/bigdecimal@3.1.8.rbi +0 -78
- data/sorbet/rbi/gems/builder@3.3.0.rbi +0 -9
- data/sorbet/rbi/gems/bump@0.10.0.rbi +0 -169
- data/sorbet/rbi/gems/byebug@11.1.3.rbi +0 -3607
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3427
- data/sorbet/rbi/gems/concurrent-ruby@1.3.4.rbi +0 -11645
- data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +0 -9
- data/sorbet/rbi/gems/crass@1.0.6.rbi +0 -623
- data/sorbet/rbi/gems/date@3.4.1.rbi +0 -75
- data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +0 -1131
- data/sorbet/rbi/gems/docile@1.4.1.rbi +0 -377
- data/sorbet/rbi/gems/drb@2.2.1.rbi +0 -1347
- data/sorbet/rbi/gems/erubi@1.13.0.rbi +0 -150
- data/sorbet/rbi/gems/globalid@1.2.1.rbi +0 -9
- data/sorbet/rbi/gems/i18n@1.14.6.rbi +0 -2359
- data/sorbet/rbi/gems/io-console@0.8.0.rbi +0 -9
- data/sorbet/rbi/gems/json@2.9.0.rbi +0 -1944
- data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14238
- data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +0 -240
- data/sorbet/rbi/gems/logger@1.6.3.rbi +0 -940
- data/sorbet/rbi/gems/loofah@2.23.1.rbi +0 -1081
- data/sorbet/rbi/gems/mail@2.8.1.rbi +0 -9
- data/sorbet/rbi/gems/marcel@1.0.4.rbi +0 -9
- data/sorbet/rbi/gems/method_source@1.1.0.rbi +0 -304
- data/sorbet/rbi/gems/mini_mime@1.1.5.rbi +0 -9
- data/sorbet/rbi/gems/minitest@5.25.4.rbi +0 -1547
- data/sorbet/rbi/gems/mocha@2.7.1.rbi +0 -12
- data/sorbet/rbi/gems/msgpack@1.7.5.rbi +0 -320
- data/sorbet/rbi/gems/net-imap@0.5.2.rbi +0 -9
- data/sorbet/rbi/gems/net-pop@0.1.2.rbi +0 -9
- data/sorbet/rbi/gems/net-protocol@0.2.2.rbi +0 -292
- data/sorbet/rbi/gems/net-smtp@0.5.0.rbi +0 -9
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -159
- data/sorbet/rbi/gems/nio4r@2.7.4.rbi +0 -9
- data/sorbet/rbi/gems/nokogiri@1.17.2.rbi +0 -8201
- data/sorbet/rbi/gems/parallel@1.26.3.rbi +0 -291
- data/sorbet/rbi/gems/parser@3.3.6.0.rbi +0 -5519
- data/sorbet/rbi/gems/prism@1.2.0.rbi +0 -39085
- data/sorbet/rbi/gems/pry-byebug@3.10.1.rbi +0 -1151
- data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10076
- data/sorbet/rbi/gems/psych@5.2.1.rbi +0 -1785
- data/sorbet/rbi/gems/racc@1.8.1.rbi +0 -162
- data/sorbet/rbi/gems/rack-session@2.0.0.rbi +0 -727
- data/sorbet/rbi/gems/rack-test@2.1.0.rbi +0 -747
- data/sorbet/rbi/gems/rack@3.1.8.rbi +0 -4905
- data/sorbet/rbi/gems/rackup@2.2.1.rbi +0 -230
- data/sorbet/rbi/gems/rails-dom-testing@2.2.0.rbi +0 -758
- data/sorbet/rbi/gems/rails-html-sanitizer@1.6.2.rbi +0 -785
- data/sorbet/rbi/gems/rails@8.0.1.rbi +0 -9
- data/sorbet/rbi/gems/railties@8.0.1.rbi +0 -6347
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -403
- data/sorbet/rbi/gems/rake@13.2.1.rbi +0 -3028
- data/sorbet/rbi/gems/rbi@0.2.1.rbi +0 -4535
- data/sorbet/rbi/gems/rdoc@6.9.1.rbi +0 -12593
- data/sorbet/rbi/gems/regexp_parser@2.9.3.rbi +0 -3772
- data/sorbet/rbi/gems/reline@0.6.0.rbi +0 -2454
- data/sorbet/rbi/gems/rexml@3.4.0.rbi +0 -4871
- data/sorbet/rbi/gems/rspec-core@3.13.2.rbi +0 -11284
- data/sorbet/rbi/gems/rspec-expectations@3.13.3.rbi +0 -8183
- data/sorbet/rbi/gems/rspec-mocks@3.13.2.rbi +0 -5341
- data/sorbet/rbi/gems/rspec-support@3.13.2.rbi +0 -1630
- data/sorbet/rbi/gems/rspec@3.13.0.rbi +0 -83
- data/sorbet/rbi/gems/rubocop-ast@1.37.0.rbi +0 -7713
- data/sorbet/rbi/gems/rubocop-md@1.2.4.rbi +0 -123
- data/sorbet/rbi/gems/rubocop-minitest@0.36.0.rbi +0 -2613
- data/sorbet/rbi/gems/rubocop-packaging@0.5.2.rbi +0 -388
- data/sorbet/rbi/gems/rubocop-performance@1.23.0.rbi +0 -9
- data/sorbet/rbi/gems/rubocop-rails@2.27.0.rbi +0 -9535
- data/sorbet/rbi/gems/rubocop@1.69.2.rbi +0 -59600
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1318
- data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +0 -9
- data/sorbet/rbi/gems/securerandom@0.4.1.rbi +0 -78
- data/sorbet/rbi/gems/simplecov-html@0.13.1.rbi +0 -225
- data/sorbet/rbi/gems/simplecov@0.22.0.rbi +0 -2149
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +0 -9
- data/sorbet/rbi/gems/spoom@1.5.0.rbi +0 -4932
- data/sorbet/rbi/gems/sqlite3@2.3.1.rbi +0 -1824
- data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +0 -9
- data/sorbet/rbi/gems/standard-performance@1.6.0.rbi +0 -9
- data/sorbet/rbi/gems/standard@1.43.0.rbi +0 -926
- data/sorbet/rbi/gems/stringio@3.1.2.rbi +0 -9
- data/sorbet/rbi/gems/tapioca@0.16.4.rbi +0 -3597
- data/sorbet/rbi/gems/thor@1.3.2.rbi +0 -4378
- data/sorbet/rbi/gems/timeout@0.4.2.rbi +0 -151
- data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +0 -5918
- data/sorbet/rbi/gems/unicode-display_width@3.1.2.rbi +0 -130
- data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +0 -251
- data/sorbet/rbi/gems/uri@1.0.2.rbi +0 -2377
- data/sorbet/rbi/gems/useragent@0.16.11.rbi +0 -9
- data/sorbet/rbi/gems/websocket-driver@0.7.6.rbi +0 -9
- data/sorbet/rbi/gems/websocket-extensions@0.1.5.rbi +0 -9
- data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +0 -435
- data/sorbet/rbi/gems/yard@0.9.37.rbi +0 -18504
- data/sorbet/rbi/gems/zeitwerk@2.7.1.rbi +0 -9
- data/sorbet/tapioca/config.yml +0 -13
- data/sorbet/tapioca/require.rb +0 -13
data/Rakefile
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "bundler"
|
4
|
-
require "bundler/gem_tasks"
|
5
|
-
|
6
|
-
unless ENV["CI"]
|
7
|
-
require "rake/testtask"
|
8
|
-
require "rspec/core/rake_task"
|
9
|
-
require "rubocop/rake_task"
|
10
|
-
|
11
|
-
# ActiveCachedResource tests
|
12
|
-
RSpec::Core::RakeTask.new(:spec)
|
13
|
-
RuboCop::RakeTask.new(:rubocop)
|
14
|
-
|
15
|
-
# ActiveResource tests
|
16
|
-
Rake::TestTask.new(:ar_tests) do |t|
|
17
|
-
t.libs = ["lib/activeresource/test"]
|
18
|
-
t.pattern = "lib/activeresource/test/**/*_test.rb"
|
19
|
-
t.warning = true
|
20
|
-
t.verbose = true
|
21
|
-
end
|
22
|
-
|
23
|
-
desc "Type check"
|
24
|
-
task :tc do
|
25
|
-
sh "srb tc"
|
26
|
-
end
|
27
|
-
|
28
|
-
task default: [:tc, :rubocop, :spec, :ar_tests]
|
29
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.
|
2
|
-
|
3
|
-
# Ignore git directory.
|
4
|
-
/.git/
|
5
|
-
/.gitignore
|
6
|
-
|
7
|
-
# Ignore bundler config.
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore all environment files.
|
11
|
-
/.env*
|
12
|
-
|
13
|
-
# Ignore all default key files.
|
14
|
-
/config/master.key
|
15
|
-
/config/credentials/*.key
|
16
|
-
|
17
|
-
# Ignore all logfiles and tempfiles.
|
18
|
-
/log/*
|
19
|
-
/tmp/*
|
20
|
-
!/log/.keep
|
21
|
-
!/tmp/.keep
|
22
|
-
|
23
|
-
# Ignore pidfiles, but keep the directory.
|
24
|
-
/tmp/pids/*
|
25
|
-
!/tmp/pids/.keep
|
26
|
-
|
27
|
-
# Ignore storage (uploaded files in development and any SQLite databases).
|
28
|
-
/storage/*
|
29
|
-
!/storage/.keep
|
30
|
-
/tmp/storage/*
|
31
|
-
!/tmp/storage/.keep
|
32
|
-
|
33
|
-
# Ignore CI service files.
|
34
|
-
/.github
|
35
|
-
|
36
|
-
# Ignore development files
|
37
|
-
/.devcontainer
|
38
|
-
|
39
|
-
# Ignore Docker-related files
|
40
|
-
/.dockerignore
|
41
|
-
/Dockerfile*
|
@@ -1,9 +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
|
8
|
-
config/credentials/*.yml.enc diff=rails_credentials
|
9
|
-
config/credentials.yml.enc diff=rails_credentials
|
data/example/consumer/.gitignore
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
-
#
|
3
|
-
# Temporary files generated by your text editor or operating system
|
4
|
-
# belong in git's global ignore instead:
|
5
|
-
# `$XDG_CONFIG_HOME/git/ignore` or `~/.config/git/ignore`
|
6
|
-
|
7
|
-
# Ignore bundler config.
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore all environment files.
|
11
|
-
/.env*
|
12
|
-
|
13
|
-
# Ignore all logfiles and tempfiles.
|
14
|
-
/log/*
|
15
|
-
/tmp/*
|
16
|
-
!/log/.keep
|
17
|
-
!/tmp/.keep
|
18
|
-
|
19
|
-
# Ignore pidfiles, but keep the directory.
|
20
|
-
/tmp/pids/*
|
21
|
-
!/tmp/pids/
|
22
|
-
!/tmp/pids/.keep
|
23
|
-
|
24
|
-
# Ignore storage (uploaded files in development and any SQLite databases).
|
25
|
-
/storage/*
|
26
|
-
!/storage/.keep
|
27
|
-
/tmp/storage/*
|
28
|
-
!/tmp/storage/
|
29
|
-
!/tmp/storage/.keep
|
30
|
-
|
31
|
-
/tmp/cache/*
|
32
|
-
!/tmp/cache/
|
33
|
-
!/tmp/cache/.keep
|
34
|
-
|
35
|
-
# Ignore master key for decrypting credentials and more.
|
36
|
-
/config/master.key
|
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
|
3
|
-
# A sample post-deploy hook
|
4
|
-
#
|
5
|
-
# These environment variables are available:
|
6
|
-
# KAMAL_RECORDED_AT
|
7
|
-
# KAMAL_PERFORMER
|
8
|
-
# KAMAL_VERSION
|
9
|
-
# KAMAL_HOSTS
|
10
|
-
# KAMAL_ROLE (if set)
|
11
|
-
# KAMAL_DESTINATION (if set)
|
12
|
-
# KAMAL_RUNTIME
|
13
|
-
|
14
|
-
echo "$KAMAL_PERFORMER deployed $KAMAL_VERSION to $KAMAL_DESTINATION in $KAMAL_RUNTIME seconds"
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
|
3
|
-
# A sample pre-build hook
|
4
|
-
#
|
5
|
-
# Checks:
|
6
|
-
# 1. We have a clean checkout
|
7
|
-
# 2. A remote is configured
|
8
|
-
# 3. The branch has been pushed to the remote
|
9
|
-
# 4. The version we are deploying matches the remote
|
10
|
-
#
|
11
|
-
# These environment variables are available:
|
12
|
-
# KAMAL_RECORDED_AT
|
13
|
-
# KAMAL_PERFORMER
|
14
|
-
# KAMAL_VERSION
|
15
|
-
# KAMAL_HOSTS
|
16
|
-
# KAMAL_ROLE (if set)
|
17
|
-
# KAMAL_DESTINATION (if set)
|
18
|
-
|
19
|
-
if [ -n "$(git status --porcelain)" ]; then
|
20
|
-
echo "Git checkout is not clean, aborting..." >&2
|
21
|
-
git status --porcelain >&2
|
22
|
-
exit 1
|
23
|
-
fi
|
24
|
-
|
25
|
-
first_remote=$(git remote)
|
26
|
-
|
27
|
-
if [ -z "$first_remote" ]; then
|
28
|
-
echo "No git remote set, aborting..." >&2
|
29
|
-
exit 1
|
30
|
-
fi
|
31
|
-
|
32
|
-
current_branch=$(git branch --show-current)
|
33
|
-
|
34
|
-
if [ -z "$current_branch" ]; then
|
35
|
-
echo "Not on a git branch, aborting..." >&2
|
36
|
-
exit 1
|
37
|
-
fi
|
38
|
-
|
39
|
-
remote_head=$(git ls-remote $first_remote --tags $current_branch | cut -f1)
|
40
|
-
|
41
|
-
if [ -z "$remote_head" ]; then
|
42
|
-
echo "Branch not pushed to remote, aborting..." >&2
|
43
|
-
exit 1
|
44
|
-
fi
|
45
|
-
|
46
|
-
if [ "$KAMAL_VERSION" != "$remote_head" ]; then
|
47
|
-
echo "Version ($KAMAL_VERSION) does not match remote HEAD ($remote_head), aborting..." >&2
|
48
|
-
exit 1
|
49
|
-
fi
|
50
|
-
|
51
|
-
exit 0
|
@@ -1,47 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# A sample pre-connect check
|
4
|
-
#
|
5
|
-
# Warms DNS before connecting to hosts in parallel
|
6
|
-
#
|
7
|
-
# These environment variables are available:
|
8
|
-
# KAMAL_RECORDED_AT
|
9
|
-
# KAMAL_PERFORMER
|
10
|
-
# KAMAL_VERSION
|
11
|
-
# KAMAL_HOSTS
|
12
|
-
# KAMAL_ROLE (if set)
|
13
|
-
# KAMAL_DESTINATION (if set)
|
14
|
-
# KAMAL_RUNTIME
|
15
|
-
|
16
|
-
hosts = ENV["KAMAL_HOSTS"].split(",")
|
17
|
-
results = nil
|
18
|
-
max = 3
|
19
|
-
|
20
|
-
elapsed = Benchmark.realtime do
|
21
|
-
results = hosts.map do |host|
|
22
|
-
Thread.new do
|
23
|
-
tries = 1
|
24
|
-
|
25
|
-
begin
|
26
|
-
Socket.getaddrinfo(host, 0, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
|
27
|
-
rescue SocketError
|
28
|
-
if tries < max
|
29
|
-
puts "Retrying DNS warmup: #{host}"
|
30
|
-
tries += 1
|
31
|
-
sleep rand
|
32
|
-
retry
|
33
|
-
else
|
34
|
-
puts "DNS warmup failed: #{host}"
|
35
|
-
host
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
tries
|
40
|
-
end
|
41
|
-
end.map(&:value)
|
42
|
-
end
|
43
|
-
|
44
|
-
retries = results.sum - hosts.size
|
45
|
-
nopes = results.count { |r| r == max }
|
46
|
-
|
47
|
-
puts "Prewarmed %d DNS lookups in %.2f sec: %d retries, %d failures" % [ hosts.size, elapsed, retries, nopes ]
|
@@ -1,109 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# A sample pre-deploy hook
|
4
|
-
#
|
5
|
-
# Checks the Github status of the build, waiting for a pending build to complete for up to 720 seconds.
|
6
|
-
#
|
7
|
-
# Fails unless the combined status is "success"
|
8
|
-
#
|
9
|
-
# These environment variables are available:
|
10
|
-
# KAMAL_RECORDED_AT
|
11
|
-
# KAMAL_PERFORMER
|
12
|
-
# KAMAL_VERSION
|
13
|
-
# KAMAL_HOSTS
|
14
|
-
# KAMAL_COMMAND
|
15
|
-
# KAMAL_SUBCOMMAND
|
16
|
-
# KAMAL_ROLE (if set)
|
17
|
-
# KAMAL_DESTINATION (if set)
|
18
|
-
|
19
|
-
# Only check the build status for production deployments
|
20
|
-
if ENV["KAMAL_COMMAND"] == "rollback" || ENV["KAMAL_DESTINATION"] != "production"
|
21
|
-
exit 0
|
22
|
-
end
|
23
|
-
|
24
|
-
require "bundler/inline"
|
25
|
-
|
26
|
-
# true = install gems so this is fast on repeat invocations
|
27
|
-
gemfile(true, quiet: true) do
|
28
|
-
source "https://rubygems.org"
|
29
|
-
|
30
|
-
gem "octokit"
|
31
|
-
gem "faraday-retry"
|
32
|
-
end
|
33
|
-
|
34
|
-
MAX_ATTEMPTS = 72
|
35
|
-
ATTEMPTS_GAP = 10
|
36
|
-
|
37
|
-
def exit_with_error(message)
|
38
|
-
$stderr.puts message
|
39
|
-
exit 1
|
40
|
-
end
|
41
|
-
|
42
|
-
class GithubStatusChecks
|
43
|
-
attr_reader :remote_url, :git_sha, :github_client, :combined_status
|
44
|
-
|
45
|
-
def initialize
|
46
|
-
@remote_url = `git config --get remote.origin.url`.strip.delete_prefix("https://github.com/")
|
47
|
-
@git_sha = `git rev-parse HEAD`.strip
|
48
|
-
@github_client = Octokit::Client.new(access_token: ENV["GITHUB_TOKEN"])
|
49
|
-
refresh!
|
50
|
-
end
|
51
|
-
|
52
|
-
def refresh!
|
53
|
-
@combined_status = github_client.combined_status(remote_url, git_sha)
|
54
|
-
end
|
55
|
-
|
56
|
-
def state
|
57
|
-
combined_status[:state]
|
58
|
-
end
|
59
|
-
|
60
|
-
def first_status_url
|
61
|
-
first_status = combined_status[:statuses].find { |status| status[:state] == state }
|
62
|
-
first_status && first_status[:target_url]
|
63
|
-
end
|
64
|
-
|
65
|
-
def complete_count
|
66
|
-
combined_status[:statuses].count { |status| status[:state] != "pending"}
|
67
|
-
end
|
68
|
-
|
69
|
-
def total_count
|
70
|
-
combined_status[:statuses].count
|
71
|
-
end
|
72
|
-
|
73
|
-
def current_status
|
74
|
-
if total_count > 0
|
75
|
-
"Completed #{complete_count}/#{total_count} checks, see #{first_status_url} ..."
|
76
|
-
else
|
77
|
-
"Build not started..."
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
|
83
|
-
$stdout.sync = true
|
84
|
-
|
85
|
-
puts "Checking build status..."
|
86
|
-
attempts = 0
|
87
|
-
checks = GithubStatusChecks.new
|
88
|
-
|
89
|
-
begin
|
90
|
-
loop do
|
91
|
-
case checks.state
|
92
|
-
when "success"
|
93
|
-
puts "Checks passed, see #{checks.first_status_url}"
|
94
|
-
exit 0
|
95
|
-
when "failure"
|
96
|
-
exit_with_error "Checks failed, see #{checks.first_status_url}"
|
97
|
-
when "pending"
|
98
|
-
attempts += 1
|
99
|
-
end
|
100
|
-
|
101
|
-
exit_with_error "Checks are still pending, gave up after #{MAX_ATTEMPTS * ATTEMPTS_GAP} seconds" if attempts == MAX_ATTEMPTS
|
102
|
-
|
103
|
-
puts checks.current_status
|
104
|
-
sleep(ATTEMPTS_GAP)
|
105
|
-
checks.refresh!
|
106
|
-
end
|
107
|
-
rescue Octokit::NotFound
|
108
|
-
exit_with_error "Build status could not be found"
|
109
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# Secrets defined here are available for reference under registry/password, env/secret, builder/secrets,
|
2
|
-
# and accessories/*/env/secret in config/deploy.yml. All secrets should be pulled from either
|
3
|
-
# password manager, ENV, or a file. DO NOT ENTER RAW CREDENTIALS HERE! This file needs to be safe for git.
|
4
|
-
|
5
|
-
# Example of extracting secrets from 1password (or another compatible pw manager)
|
6
|
-
# SECRETS=$(kamal secrets fetch --adapter 1password --account your-account --from Vault/Item KAMAL_REGISTRY_PASSWORD RAILS_MASTER_KEY)
|
7
|
-
# KAMAL_REGISTRY_PASSWORD=$(kamal secrets extract KAMAL_REGISTRY_PASSWORD ${SECRETS})
|
8
|
-
# RAILS_MASTER_KEY=$(kamal secrets extract RAILS_MASTER_KEY ${SECRETS})
|
9
|
-
|
10
|
-
# Use a GITHUB_TOKEN if private repositories are needed for the image
|
11
|
-
# GITHUB_TOKEN=$(gh config get -h github.com oauth_token)
|
12
|
-
|
13
|
-
# Grab the registry password from ENV
|
14
|
-
KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD
|
15
|
-
|
16
|
-
# Improve security by using a password manager. Never check config/master.key into git!
|
17
|
-
RAILS_MASTER_KEY=$(cat config/master.key)
|
data/example/consumer/Dockerfile
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# syntax=docker/dockerfile:1
|
2
|
-
# check=error=true
|
3
|
-
|
4
|
-
# This Dockerfile is designed for production, not development. Use with Kamal or build'n'run by hand:
|
5
|
-
# docker build -t consumer .
|
6
|
-
# docker run -d -p 80:80 -e RAILS_MASTER_KEY=<value from config/master.key> --name consumer consumer
|
7
|
-
|
8
|
-
# For a containerized dev environment, see Dev Containers: https://guides.rubyonrails.org/getting_started_with_devcontainer.html
|
9
|
-
|
10
|
-
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version
|
11
|
-
ARG RUBY_VERSION=3.2.2
|
12
|
-
FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base
|
13
|
-
|
14
|
-
# Rails app lives here
|
15
|
-
WORKDIR /rails
|
16
|
-
|
17
|
-
# Install base packages
|
18
|
-
RUN apt-get update -qq && \
|
19
|
-
apt-get install --no-install-recommends -y curl libjemalloc2 sqlite3 && \
|
20
|
-
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
21
|
-
|
22
|
-
# Set production environment
|
23
|
-
ENV RAILS_ENV="production" \
|
24
|
-
BUNDLE_DEPLOYMENT="1" \
|
25
|
-
BUNDLE_PATH="/usr/local/bundle" \
|
26
|
-
BUNDLE_WITHOUT="development"
|
27
|
-
|
28
|
-
# Throw-away build stage to reduce size of final image
|
29
|
-
FROM base AS build
|
30
|
-
|
31
|
-
# Install packages needed to build gems
|
32
|
-
RUN apt-get update -qq && \
|
33
|
-
apt-get install --no-install-recommends -y build-essential git pkg-config && \
|
34
|
-
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
35
|
-
|
36
|
-
# Install application gems
|
37
|
-
COPY Gemfile Gemfile.lock ./
|
38
|
-
RUN bundle install && \
|
39
|
-
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git
|
40
|
-
|
41
|
-
# Copy application code
|
42
|
-
COPY . .
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
# Final stage for app image
|
48
|
-
FROM base
|
49
|
-
|
50
|
-
# Copy built artifacts: gems, application
|
51
|
-
COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}"
|
52
|
-
COPY --from=build /rails /rails
|
53
|
-
|
54
|
-
# Run and own only the runtime files as a non-root user for security
|
55
|
-
RUN groupadd --system --gid 1000 rails && \
|
56
|
-
useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \
|
57
|
-
chown -R rails:rails db log storage tmp
|
58
|
-
USER 1000:1000
|
59
|
-
|
60
|
-
# Entrypoint prepares the database.
|
61
|
-
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
|
62
|
-
|
63
|
-
# Start server via Thruster by default, this can be overwritten at runtime
|
64
|
-
EXPOSE 80
|
65
|
-
CMD ["./bin/thrust", "./bin/rails", "server"]
|
data/example/consumer/Gemfile
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
source "https://rubygems.org"
|
2
|
-
|
3
|
-
gem "active_cached_resource", path: "../../"
|
4
|
-
gem "activeresource", git: "https://github.com/jlurena/activeresource.git", branch: "ISSUE-408-lazy-network-calls"
|
5
|
-
gem "rails", "~> 8.0.0"
|
6
|
-
gem "sqlite3", ">= 2.1"
|
7
|
-
gem "puma", ">= 5.0"
|
8
|
-
gem "tzinfo-data", platforms: %i[ windows jruby ]
|
9
|
-
gem "solid_cache"
|
10
|
-
gem "solid_queue"
|
11
|
-
gem "kamal", require: false
|
12
|
-
gem "thruster", require: false
|
13
|
-
|
14
|
-
group :development, :test do
|
15
|
-
gem "pry-byebug"
|
16
|
-
gem "brakeman", require: false
|
17
|
-
end
|
data/example/consumer/Rakefile
DELETED
File without changes
|
@@ -1,7 +0,0 @@
|
|
1
|
-
class ApplicationJob < ActiveJob::Base
|
2
|
-
# Automatically retry jobs that encountered a deadlock
|
3
|
-
# retry_on ActiveRecord::Deadlocked
|
4
|
-
|
5
|
-
# Most jobs are safe to ignore if the underlying records are no longer available
|
6
|
-
# discard_on ActiveJob::DeserializationError
|
7
|
-
end
|
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= yield %>
|
data/example/consumer/bin/bundle
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'bundle' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "rubygems"
|
12
|
-
|
13
|
-
m = Module.new do
|
14
|
-
module_function
|
15
|
-
|
16
|
-
def invoked_as_script?
|
17
|
-
File.expand_path($0) == File.expand_path(__FILE__)
|
18
|
-
end
|
19
|
-
|
20
|
-
def env_var_version
|
21
|
-
ENV["BUNDLER_VERSION"]
|
22
|
-
end
|
23
|
-
|
24
|
-
def cli_arg_version
|
25
|
-
return unless invoked_as_script? # don't want to hijack other binstubs
|
26
|
-
return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
|
27
|
-
bundler_version = nil
|
28
|
-
update_index = nil
|
29
|
-
ARGV.each_with_index do |a, i|
|
30
|
-
if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN)
|
31
|
-
bundler_version = a
|
32
|
-
end
|
33
|
-
next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
|
34
|
-
bundler_version = $1
|
35
|
-
update_index = i
|
36
|
-
end
|
37
|
-
bundler_version
|
38
|
-
end
|
39
|
-
|
40
|
-
def gemfile
|
41
|
-
gemfile = ENV["BUNDLE_GEMFILE"]
|
42
|
-
return gemfile if gemfile && !gemfile.empty?
|
43
|
-
|
44
|
-
File.expand_path("../Gemfile", __dir__)
|
45
|
-
end
|
46
|
-
|
47
|
-
def lockfile
|
48
|
-
lockfile =
|
49
|
-
case File.basename(gemfile)
|
50
|
-
when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
|
51
|
-
else "#{gemfile}.lock"
|
52
|
-
end
|
53
|
-
File.expand_path(lockfile)
|
54
|
-
end
|
55
|
-
|
56
|
-
def lockfile_version
|
57
|
-
return unless File.file?(lockfile)
|
58
|
-
lockfile_contents = File.read(lockfile)
|
59
|
-
return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
|
60
|
-
Regexp.last_match(1)
|
61
|
-
end
|
62
|
-
|
63
|
-
def bundler_requirement
|
64
|
-
@bundler_requirement ||=
|
65
|
-
env_var_version ||
|
66
|
-
cli_arg_version ||
|
67
|
-
bundler_requirement_for(lockfile_version)
|
68
|
-
end
|
69
|
-
|
70
|
-
def bundler_requirement_for(version)
|
71
|
-
return "#{Gem::Requirement.default}.a" unless version
|
72
|
-
|
73
|
-
bundler_gem_version = Gem::Version.new(version)
|
74
|
-
|
75
|
-
bundler_gem_version.approximate_recommendation
|
76
|
-
end
|
77
|
-
|
78
|
-
def load_bundler!
|
79
|
-
ENV["BUNDLE_GEMFILE"] ||= gemfile
|
80
|
-
|
81
|
-
activate_bundler
|
82
|
-
end
|
83
|
-
|
84
|
-
def activate_bundler
|
85
|
-
gem_error = activation_error_handling do
|
86
|
-
gem "bundler", bundler_requirement
|
87
|
-
end
|
88
|
-
return if gem_error.nil?
|
89
|
-
require_error = activation_error_handling do
|
90
|
-
require "bundler/version"
|
91
|
-
end
|
92
|
-
return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
|
93
|
-
warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
|
94
|
-
exit 42
|
95
|
-
end
|
96
|
-
|
97
|
-
def activation_error_handling
|
98
|
-
yield
|
99
|
-
nil
|
100
|
-
rescue StandardError, LoadError => e
|
101
|
-
e
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
m.load_bundler!
|
106
|
-
|
107
|
-
if m.invoked_as_script?
|
108
|
-
load Gem.bin_path("bundler", "bundle")
|
109
|
-
end
|
data/example/consumer/bin/dev
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/bin/bash -e
|
2
|
-
|
3
|
-
# Enable jemalloc for reduced memory usage and latency.
|
4
|
-
if [ -z "${LD_PRELOAD+x}" ]; then
|
5
|
-
LD_PRELOAD=$(find /usr/lib -name libjemalloc.so.2 -print -quit)
|
6
|
-
export LD_PRELOAD
|
7
|
-
fi
|
8
|
-
|
9
|
-
# If running the rails server then create or migrate existing database
|
10
|
-
if [ "${@: -2:1}" == "./bin/rails" ] && [ "${@: -1:1}" == "server" ]; then
|
11
|
-
./bin/rails db:prepare
|
12
|
-
fi
|
13
|
-
|
14
|
-
exec "${@}"
|