У меня есть приложение rails, которое использует sidekiq для фоновых заданий. Недавно обновленный ruby с 2.7.0 до 3.1.2 и, соответственно, redis gem автоматически обновляется до «5.0.5». После того, как этот журнал sidekiq (6.4.1) выдает ошибку ниже, если я вернусь к старой версии Redis (4.6.0) в своем gemlock, ошибки не будет. Есть идеи, в чем причина этого?
Сообщение об ошибке:





Клиент Redis для Ruby был недавно обновлен и теперь строго проверяет типы аргументов команды. Sidekiq с версии 6.4.2 передавал логическое значение (в вашем случае FalseClass) в коде сердцебиения, которое новый клиент Redis отклонил, отсюда и ошибка. Логические значения недействительны, поскольку хэши Redis не поддерживают подсказки типов; Redis 4.6 и старше просто незаметно преобразовывались в строку.
Sidekiq обновлен для работы с новым клиентом Redis версии 6.5.x. Я использую 6.5.5, и ошибка исчезла:
gem 'sidekiq', '~> 6.5.5'
Вот PR, который представил исправление для справки: https://github.com/mperham/sidekiq/pull/5298
Я пришел сюда из-за подобной ошибки. В моем случае это была плохая комбинация драгоценных камней с разными требованиями.
Я использую sidekiq-unique-jobs, который (по состоянию на ноябрь 2022 г.) не работает с 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
Работал как шарм для меня Rails 6.1.5, Ruby 2.7.1, MBP M1Max, Монтерей