If you want Sidekiq to be able to talk to Redis on staging and production servers, you need to add the following to your configuration:
# config/initializers/sidekiq.rb
require 'sidekiq'
Sidekiq.configure_client do |config|
  config.redis = { url: REDIS_URL }
end
Sidekiq.configure_server do |config|
  config.redis = { url: REDIS_URL }
end
The following step may be skipped for new Sidekiq 6+, since it isn't recommended anymore to use a global redis client.
# config/initializers/redis.rb
require 'redis'
require_relative '../constants/redis'
Redis.current = Redis.new(url: REDIS_URL)
Redis.currentdeprecatedVersion 4.6 introduces deprecation warning for
Redis.current, which will be removed altogether in 5.0. Read this card for ways to deal with this.
Now we can determine the correct REDIS_URL like this:
# config/constants/redis.rb
module RedisConstantHelper
  module_function
  def redis_url
    "redis://localhost:#{port}/#{db_number}"
  end
  def db_number
    # Returns a number between 2 and n.
    # Redis db#1 is used for development.
    db_number = 1
    if rails_env == 'test'
      normalized_test_number = [ENV['TEST_ENV_NUMBER'].to_i, 1].max
      db_number += normalized_test_number
    end
    db_number
  end
  def port
    case rails_env
    when 'staging'
      # <staging_port>
    when 'production'
      # <production_port>
    else
      6379 # default Redis port
    end
  end
  def rails_env
    defined?(Rails) ? Rails.env : ENV['RAILS_ENV']
  end
end
REDIS_URL = RedisConstantHelper.redis_url
Make sure to require the /constants folder on startup:
# config/application.rb
module ProjectName
  class Application < Rails::Application
    
    # require /constants on startup
    Dir.glob(Rails.root.join('config/constants/**/*.rb')).each do |filename|
      require filename
    end
    
  end
end
Posted by Klaus Weidinger to makandra dev (2021-10-11 13:15)