diff --git a/README.md b/README.md index ed25fc393..1d9ec815e 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,7 @@ The `spec:prepare` task generates css assets for use by the tests. You can delet Once you are set up, you can also run `rubocop` to enforce consistent coding style. +The test app comes with [Solid Queue](https://github.com/rails/solid_queue) configured as the backend for [Active Job](https://edgeguides.rubyonrails.org/active_job_basics.html). [Mission Control - Jobs](https://github.com/rails/mission_control-jobs), the jobs dashboard, is available at http://localhost:3000/jobs. ### Individual commands diff --git a/spec/test_app_templates/lib/generators/test_app_generator.rb b/spec/test_app_templates/lib/generators/test_app_generator.rb index 773d9d7bb..3b370ee96 100644 --- a/spec/test_app_templates/lib/generators/test_app_generator.rb +++ b/spec/test_app_templates/lib/generators/test_app_generator.rb @@ -43,6 +43,16 @@ def run_blacklight_generator generate :'blacklight:install', '--devise' end + def preconfigure_solid_queue_for_development + return if ENV['CI'] + + add_solid_queue_for_rails7 + configure_solid_queue_database + use_solid_queue_in_development + use_solid_queue_puma_plugin_in_development + use_mission_control + end + def run_spotlight_migrations rake 'spotlight:install:migrations' rake 'db:migrate' @@ -88,4 +98,67 @@ def raise_on_missing_translation uncomment_lines 'config/environments/development.rb', /config.action_view.raise_on_missing_translations/ uncomment_lines 'config/environments/test.rb', /config.action_view.raise_on_missing_translations/ end + + private + + def add_solid_queue_for_rails7 + return unless Rails.version < '8' + + gem 'solid_queue' + bundle_install + generate 'solid_queue:install' + end + + def configure_solid_queue_database # rubocop:disable Metrics/MethodLength + gsub_file 'config/database.yml', /^development:\n <<: \*default\n database: .*\n/ do + <<~YAML + development: + primary: + <<: *default + database: storage/development.sqlite3 + queue: + <<: *default + database: storage/development_queue.sqlite3 + migrations_paths: db/queue_migrate + YAML + end + + inject_into_file 'config/database.yml', after: /^development:\n primary:\n <<: \*default\n database: .*\n/ do + <<-YAML + + queue: + <<: *default + database: storage/development_queue.sqlite3 + migrations_paths: db/queue_migrate + YAML + end + end + + def use_solid_queue_in_development + inject_into_file 'config/environments/development.rb', before: /^end/ do + <<-RUBY + + # Use Solid Queue in Development + config.active_job.queue_adapter = :solid_queue + config.solid_queue.connects_to = { database: { writing: :queue } } + RUBY + end + end + + def use_solid_queue_puma_plugin_in_development + return unless File.exist? File.expand_path('config/puma.rb') + + gsub_file 'config/puma.rb', + 'plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"]', + 'plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"] || Rails.env.development?' + end + + def use_mission_control + gem 'mission_control-jobs' + Bundler.with_unbundled_env { run 'bundle install' } + inject_into_file 'config/environments/development.rb', before: /^end/ do + " config.mission_control.jobs.http_basic_auth_enabled = false\n" + end + route 'mount MissionControl::Jobs::Engine, at: "/jobs"' + end end