【问题标题】:heartbeat: Unsupported command argument type: FalseClass - Redis心跳:不支持的命令参数类型:FalseClass - Redis
【发布时间】:2022-11-25 23:55:29
【问题描述】:

我有一个使用 sidekiq 进行后台作业的 Rails 应用程序。最近将 ruby​​ 从 2.7.0 升级到 3.1.2,分别将 redis gem 自动更新到“5.0.5”。在这个 sidekiq(6.4.1) 日志抛出以下错误之后,如果我在我的 gemlock 中恢复到旧的 redis 版本 (4.6.0),则没有错误。知道这是什么原因吗?

错误信息:

【问题讨论】:

    标签: ruby-on-rails redis sidekiq


    【解决方案1】:

    Ruby 的 Redis 客户端最近更新,现在严格检查命令参数类型。从 6.4.2 开始,Sidekiq 在心跳代码中传递了一个布尔值(在你的例子中是FalseClass),新的 Redis 客户端拒绝了它,因此出现了错误。布尔值无效,因为 Redis 哈希不支持类型提示; Redis 4.6 及更早版本会悄悄地转换为字符串。

    从 6.5.x 开始,Sidekiq 已更新为与新的 Redis 客户端一起使用。我使用的是 6.5.5,错误消失了:

    gem 'sidekiq', '~> 6.5.5'

    这是引入修复的 PR 以供参考:https://github.com/mperham/sidekiq/pull/5298

    【讨论】:

    • 对我来说就像一个魅力 Rails 6.1.5,Ruby 2.7.1,MBP M1Max,Monterey
    【解决方案2】:

    由于类似的错误,我来到这里。就我而言,这是具有不同要求的 Gems 的糟糕组合。

    我正在使用 sidekiq-unique-jobs,它(截至 2022 年 11 月)不适用于 Sidekiq 7。但是,它和 Sidekiq 都需要特定版本的 Redis。添加 redis 明确允许我更新到最新的 sidekiq 版本,该版本修复了这个问题:

    gem 'sidekiq', '< 7' # 7.0 is not compatible with sidekiq-unique-jobs
    gem 'sidekiq-unique-jobs', '~> 7.1'
    gem 'redis', '~> 4' # sidekiq requires < 5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多