0

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

更新:当我执行 aperform_async(args)它返回一个字符串。

4

2 回答 2

0

听起来您的 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

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

于 2013-09-13T18:16:13.807 回答
0

我遇到了同样的问题。

结果我已经rspec-sidekiq在我Gemfiledevelopment组中进行了配置,并且rspec-sidekiq显然存根了异步调用以进行测试。

解决方案是这样修改我Gemfile的:

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

最后,我require 'rspec-sidekiq'在我的spec_helper.rb.

于 2015-09-18T16:04:53.923 回答