【发布时间】:2021-08-19 04:08:45
【问题描述】:
我正在玩(其他一些事情),需要在重试队列中获得一些 Sidekiq 作业。
我无法使用有意引发生产环境异常的代码部署新代码。我们的应用程序如此闪亮而干净,以至于我们从未在现实生活中遇到过失败的工作。 [/讽刺]
那么,当您无法更改暂存服务器上的代码时,是否有一种简单的方法可以让作业失败?
【问题讨论】:
标签: ruby-on-rails ruby sidekiq
我正在玩(其他一些事情),需要在重试队列中获得一些 Sidekiq 作业。
我无法使用有意引发生产环境异常的代码部署新代码。我们的应用程序如此闪亮而干净,以至于我们从未在现实生活中遇到过失败的工作。 [/讽刺]
那么,当您无法更改暂存服务器上的代码时,是否有一种简单的方法可以让作业失败?
【问题讨论】:
标签: ruby-on-rails ruby sidekiq
假设您可以访问 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 错误的作业排队。如果是这样,请使用它...然后修复该端点以更好地验证输入!
【讨论】:
甚至更简单...只需省略接受 args 的 任何 worker 的参数(例如 WidgetSlapWorker.perform_async()),您将在重试队列中出现 ArgumentError 错误。 p>
【讨论】: