我在从 Resque 转换为 Sidekiq 时遇到问题。尽管 perform_async(ids)
没有向 Redis 添加任何内容,但我没有收到任何错误。我可以通过 Redis.current.append("test", "key")
将 key 直接添加到 Redis 服务器
我的 Sidekiq worker 也连接到 Redis 服务器,尽管当我请求 Sidekiq::Client.registered_workers
时我得到一个空数组 Web UI 仅显示骨架,除了 Redis 信息外没有其他信息。我不知道这是否重要但是 Sidekiq.redis { |conn| conn.info }
返回的信息对于我的本地 Redis 服务器来说都是正确的。虽然 Sidekiq.server?
返回一个 nil 值。
更新:当我执行 perform_async(args)
时,它返回一个字符串。
最佳答案
听起来您的 Sidekiq 配置没有为 Sidekiq 的客户端和服务器组件使用相同的 redis 配置。
客户端在您的 Rails 应用程序服务器中执行,而服务器是执行工作的独立进程。如果他们都没有通过 redis 配置使用相同的 redis 队列,则不会处理工作。
这是一个示例 config/initializers/sidekiq.rb
配置 block ,两个组件使用相同的 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
我的猜测是您的客户端和服务器配置之间有不同的命名空间或配置。
关于ruby-on-rails - Sidekiq 未连接到 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777404/