Ruby on rails 如何判断sidekiq是否连接到redis服务器?

Ruby on rails 如何判断sidekiq是否连接到redis服务器?,ruby-on-rails,redis,sidekiq,Ruby On Rails,Redis,Sidekiq,使用控制台,我如何判断sidekiq是否连接到redis服务器?我希望能够做到以下几点: if (sidekiq is connected to redis) # psuedo code MrWorker.perform_async('do_work', user.id) else MrWorker.new.perform('do_work', user.id) end 您可以使用Sidekiq提供的Redis信息: redis_info = Sidekiq.redis { |conn

使用控制台,我如何判断sidekiq是否连接到redis服务器?我希望能够做到以下几点:

if (sidekiq is connected to redis) # psuedo code
  MrWorker.perform_async('do_work', user.id)
else
  MrWorker.new.perform('do_work', user.id)
end

您可以使用Sidekiq提供的Redis信息:

redis_info = Sidekiq.redis { |conn| conn.info }
redis_info['connected_clients'] # => "16"

从中获取它。

我将此方法用于Rails,如果已连接,则返回
true
,如果未连接,则返回
false

  def redis_connected?
    !!Sidekiq.redis(&:info) rescue false
  end

听起来您想知道是否有一个Sidekiq进程在给定的时间点启动并运行以处理作业。使用Sidekiq 3.0,您可以做到:

require 'sidekiq/api'

ps = Sidekiq::ProcessSet.new
if ps.size > 0
  MyWorker.perform_async(1,2,3)
else
  MyWorker.new.perform(1,2,3)
end

Sidekiq::ProcessSet为您提供关于任何正在运行的Sidekiq进程的几乎实时(每5秒更新一次)信息。

从@overallduka的答案开始,对于使用gem的用户,这是我设置的自定义检查:

begin
  MrWorker.perform_async('do_work', user.id)
rescue Redis::CannotConnectError => e
  MrWorker.new.perform('do_work', user.id)
end
class SidekiqCheck < OkComputer::Check
  def check
    if sidekiq_accessible?
      mark_message "ok"
    else
      mark_failure
    end
  end

  private
  def sidekiq_accessible?
    begin
      Sidekiq.redis { |conn| conn.info }
    rescue Redis::CannotConnectError
    end.present?
  end
end

OkComputer::Registry.register "sidekiq", SidekiqCheck.new
class-SidekiqCheck
如果没有可用的redis连接或服务器,
conn.info
将引发异常
redis::CannotConnectError