Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
73 changes: 73 additions & 0 deletions spec/test_app_templates/lib/generators/test_app_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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