【问题标题】:Easy way to force a Sidekiq job into the Retry queue?强制 Sidekiq 作业进入重试队列的简单方法?
【发布时间】:2021-08-19 04:08:45
【问题描述】:

我正在玩(其他一些事情),需要在重试队列中获得一些 Sidekiq 作业。

我无法使用有意引发生产环境异常的代码部署新代码。我们的应用程序如此闪亮而干净,以至于我们从未在现实生活中遇到过失败的工作。 [/讽刺]

那么,当您无法更改暂存服务器上的代码时,是否有一种简单的方法可以让作业失败?

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

    假设您可以访问 rails 控制台...

    在您的应用中找到一个执行 Model.find(id) 的 Worker 类,其中 id 是 perform() 的参数。很有可能您的许多/大多数工人都符合要求。也许是这样的:

    class WidgetSlapWorker
      include Sidekiq::Worker
    
      def perform(id)
        Widget.find(id).slap
      end
    end
    

    从 Rails 控制台,只需排队一个不存在 ID 的作业:

    WidgetSlapWorker.perform_asycnc(-999)
    

    这项工作将提高 ActiveRecord::RecordNotFound 直到奶牛回家。

    如果您没有 Rails 控制台访问权限,那么您的应用程序的 API 可能有一个具有类似行为的端点,它会将 ID 错误的作业排队。如果是这样,请使用它...然后修复该端点以更好地验证输入!

    【讨论】:

      【解决方案2】:

      甚至更简单...只需省略接受 args 的 任何 worker 的参数(例如 WidgetSlapWorker.perform_async()),您将在重试队列中出现 ArgumentError 错误。 p>

      【讨论】:

        猜你喜欢
        • 2020-12-13
        • 2013-06-16
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 2018-09-27
        • 2014-12-03
        • 2020-08-30
        • 1970-01-01
        相关资源
        最近更新 更多