Sometimes you want to create a small Sidekiq service to process requests, without all the extra bloat (and memory usage) from a Rails framework. It turns out that creating such service is not all that hard to do. Create your application using the folders and files below as your starting point.
Gemfile
# Gemfile source 'https://rubygems.org' ruby "2.5.0" git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end gem "sidekiq"
config/sidekiq.yml
--- :concurrency: <%= ENV["CONCURRENCY"] || 25 %> :queues: - default
config/application.rb
# config/application.rb ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) Bundler.require ENV["RACK_ENV"] ||= "development" module Example class Application def self.root @root ||= File.dirname(File.expand_path('..', __FILE__)) end def self.env @env ||= ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["ENV"] || "development" end def self.logger @logger ||= Logger.new(STDOUT) end end end require_relative "initializers/sidekiq"
config/initializers/sidekiq.rb
# config/initializers/sidekiq.rb Sidekiq.configure_server do |config| config.redis = { url: ENV["REDIS_URL"] } end
app/workers/my_worker.rb
# app/workers/my_worker.rb class MyWorker include Sidekiq::Worker def perform(*args) # Do work here end end
Once you have created those files, then you can run the following on the command line:
bundle exec sidekiq -e ${RACK_ENV:-development} -r ./config/application.rb -C ./config/sidekiq.yml
If you want to enqueue jobs from another application using Sidekiq, its as easy as:
Sidekiq::Client.enqueue_to "default", MyWorker, "param_1" => "1", "param_2" => "2"
When you have all this working, then you can start adding things like your database connections and other gems and code to the worker. Let me know if this helps anyone or if you run into any problems!