Sidekiq with docker-compose
Set up sidekiq with local support for docker-compose
Used 50 times
T
TobiasBales
Usage
Run this command in your Rails app directory in the terminal:
rails app:template LOCATION="https://railsbytes.com/script/VwysYA"
Template Source
Review the code before running this template on your machine.
def file_contains?(filename, string)
File.foreach(filename).detect { |line| line.include?(string) }
end
gem 'sidekiq'
gem 'sidekiq-statistic'
gem 'redis' unless file_contains? 'Gemfile', "Gem 'redis'"
gem 'hiredis' unless file_contains? 'Gemfile', "Gem 'hiredis'"
Bundler.with_unbundled_env { run 'bundle install' }
unless File.exist? 'docker-compose.yml'
create_file 'docker-compose.yml' do <<~YAML
version: "3.1"
services:
YAML
end
end
inject_into_file 'docker-compose.yml' do <<-YAML
redis-sidekiq:
image: redis
restart: always
volumes:
- ./tmp/redis-sidekiq:/data
ports:
- 6380:6379
YAML
end
application do <<~EOF
config.active_job.queue_adapter = :sidekiq
EOF
end
inject_into_file 'config/routes.rb' do <<~EOF
require "sidekiq/web"
if Rails.env.production?
Sidekiq::Web.use Rack::Auth::Basic do |username, password|
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(username), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_USERNAME"])) &
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(password), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_PASSWORD"]))
end
end
EOF
end
route 'mount Sidekiq::Web => "/sidekiq"'
if File.exist? 'Procfile'
inject_into_file 'Procfile' do <<~EOF
worker: bundle exec sidekiq -t 25
EOF
end
end
if File.exist? 'Procfile.dev'
inject_into_file 'Procfile.dev' do <<~EOF
worker: bundle exec sidekiq -t 25
EOF
end
end