【问题标题】:Sidekiq not connecting to RailsSidekiq 未连接到 Rails
【发布时间】:2013-09-17 14:46:08
【问题描述】:

我在从 Resque 转换到 Sidekiq 时遇到问题。尽管 perform_async(ids) 没有向 Redis 添加任何内容,但我没有收到任何错误。我可以通过Redis.current.append("test", "key") 将密钥直接添加到 Redis 服务器 我的 Sidekiq 工作人员也连接到 Redis 服务器,尽管当我请求 Sidekiq::Client.registered_workers 时我得到一个空数组。Web UI 仅显示骨架,除了 Redis 信息之外没有其他信息。我不知道这是否重要,但Sidekiq.redis { |conn| conn.info } 返回的信息对于我的本地 Redis 服务器来说都是正确的。虽然 Sidekiq.server? 返回一个 nil 值。

更新:当我执行perform_async(args) 时,它会返回一个字符串。

【问题讨论】:

  • 明显问题:您正在运行最新的 Sidekiq (2.14.1) 并安装了 Redis 2.4 或更高版本?而且您至少在使用 Ruby 1.9.3?

标签: ruby-on-rails ruby-on-rails-3 redis sidekiq


【解决方案1】:

听起来您的 Sidekiq 配置没有为 Sidekiq 的客户端和服务器组件使用相同的 redis 配置。

客户端在您的 Rails 应用服务器中执行,而服务器是执行工作的独立进程。如果他们都没有通过 redis 配置使用相同的 redis 队列,则不会处理工作。

这是一个示例 config/initializers/sidekiq.rb 配置块,对两个组件使用相同的 redis:

redis = { url: (ENV['REDIS_URL'] || 'redis://127.0.0.1'), namespace: 'sidekiq' }

Sidekiq.configure_server do |config|
  config.redis = redis
end

Sidekiq.configure_client do |config|
  config.redis = redis
end

我的猜测是您的客户端和服务器配置之间有不同的命名空间或配置。

【讨论】:

  • 对不起,我已经有一个sidekiq.rb,它将服务器和客户端配置为相同的命名空间和 Redis 地址。
【解决方案2】:

我遇到了同样的问题。

原来我在Gemfiledevelopment 组中配置了rspec-sidekiq,而rspec-sidekiq 显然存根了异步调用以进行测试。

解决方案是修改我的Gemfile

gem 'rspec-sidekiq', group: :test, require: false

最后,我在spec_helper.rb 中添加了require 'rspec-sidekiq'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2014-04-27
    • 2019-02-27
    • 2019-03-03
    相关资源
    最近更新 更多