You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Sidekiq::Status.cancel取消任务时触发ArgumentError错误求助

问题:调用Sidekiq::Status.cancel取消任务时触发参数错误

尝试调用Sidekiq::Status.cancel(jid)取消Sidekiq任务时,出现以下错误:

ArgumentError: wrong number of arguments (given 4, expected 3)

错误来自redis-5.0.6的zrangebyscore方法,错误回溯指向sidekiq-status-1.1.4的storage.rb文件。

原因分析

从错误栈可以看出:

  • 当前使用的sidekiq-status版本是1.1.4,属于较老版本,其内部调用zrangebyscore时使用的是位置参数(比如zrangebyscore(key, min, max, offset, count))
  • 而redis 5.x版本的zrangebyscore方法已经将limit等参数改为关键字参数(定义为def zrangebyscore(key, min, max, withscores: false, with_scores: withscores, limit: nil))
  • 两者参数传递方式不匹配,导致触发参数数量错误。

解决方案

方案1:降级Redis版本到兼容版本

将Redis版本降级到与sidekiq-status-1.1.4兼容的4.x系列,在Gemfile中指定:

gem 'redis', '~> 4.8.0'

执行以下命令更新依赖:

bundle install

方案2:升级Sidekiq-Status到兼容Redis 5.x的版本

查找并升级sidekiq-status到支持Redis 5.x的版本(建议至少升级到1.2.0及以上,需确认与当前Sidekiq 3.3.4的兼容性),在Gemfile中指定:

gem 'sidekiq-status', '~> 1.2.0' # 或更高兼容版本

执行以下命令更新依赖:

bundle install

注意:如果新版本sidekiq-status不兼容Sidekiq 3.3.4,可能需要同步升级Sidekiq到对应兼容版本,这会涉及更多代码适配。

方案3:临时修改Gem源码(不推荐)

如果暂时无法升级/降级依赖,可以临时修改sidekiq-status的源码,调整zrangebyscore的调用方式:

  1. 找到sidekiq-status-1.1.4/lib/sidekiq-status/storage.rb文件的schedule_batch方法
  2. 将原来的位置参数调用(类似conn.zrangebyscore(scheduled_key, '-inf', job_unix_time, 0, 1000))改为关键字参数形式:
conn.zrangebyscore(scheduled_key, '-inf', job_unix_time, limit: [0, 1000])

此方法仅作为临时修复,后续执行bundle update会覆盖修改,不建议长期使用。

验证

修改完成后,重新调用Sidekiq::Status.cancel(jid),确认错误消失,任务可正常取消。

内容的提问来源于stack exchange,提问作者Pranathi D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:43:27