【发布时间】:2018-08-29 22:53:27
【问题描述】:
我注意到,当 Sidekiq / 活动作业由于抛出错误而失败时,作业期间发生的任何数据库更改都会回滚。这似乎是一个有意使工作具有幂等性的功能。
我的问题是作业运行的方法可以向用户发送电子邮件,并且它使用数据库修改来防止重新发送电子邮件。如果数据库更改回滚,则每当重试作业时都会重新发送电子邮件。
我的工作大致如下:
class ProcessPaymentsJob < ApplicationJob
queue_as :default
def perform(*args)
begin
# This can send emails to users.
PaymentProcessor.perform
rescue StandardError => error
puts 'PaymentsJob failed, ignoring'
puts error
end
end
end
作业计划使用sidekiq-scheduler 定期运行。我正在使用 rails-api v5。
我添加了一个rescue 来尝试防止作业回滚数据库更改,但它仍然会发生。
我突然想到,也许这根本不是 Sidekiq 问题,而是 Rails 的一个特性。
防止向用户发送垃圾邮件的最佳解决方案是什么?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5 sidekiq rails-api