gpt4 book ai didi

heroku - Delayed::Jobs 在 Heroku 上运行两次?

转载 作者:行者123 更新时间:2023-12-03 14:51:44 27 4
gpt4 key购买 nike

我在 Heroku 上运行 Delayed::Job 时遇到问题。大部分排队等待延迟执行的作业运行两次 (有时只是一次)。因此,我的大部分 Sendgrid 电子邮件都是重复发送的,而且我的大部分 ActiveMerchant 交易都尝试自行结算两次!

我们的 Heroku 实例上有 2 个 worker 在运行。巧合?我认为我们需要两个,因为我们还有一个用于备份和其他内容的 cron。

发生两次的作业彼此重叠(不可估量地接近)。这是一个竞争条件,但由什么引起的?

具体是:

$ heroku stack
aspen-mri-1.8.6
bamboo-mri-1.9.2
* bamboo-ree-1.8.7
cedar (beta)

我们运行了 10 个 web dynos,并有一个 Ronin 数据库。插件方面我们有:
Basic Release Management FREE
Cron Daily Cron FREE
Custom Domains FREE
Expanded Logging FREE
Hostname SSL 20.00 PER MONTH
PG Backups Basic FREE
Sendgrid Pro 20.00 PER MONTH
Shared Database 5MB FREE

在 Gemfile 中:
gem 'rails', '3.0.6'
gem 'delayed_job', :git => 'git://github.com/collectiveidea/delayed_job.git', :tag => 'v2.1.2' # 3.x doesn't seem to work with Heroku

我的处理程序看起来像:
class OrderEmailJob < Struct.new(:order_id, :email_type)
def perform
OrderMailer.send(email_type, Order.find(order_id)).deliver
end
end

并排队像:
Delayed::Job.enqueue OrderEmailJob.new(self.id, :order_confirmation)

我尝试了许多不同版本的 DJ,但这是我唯一可以在 Heroku 上工作的版本。

真的很感激任何建议。这对我们的网站非常不利。

最佳答案

如果您使用 Heroku 调度程序,则不需要更多的工作人员。 Heroku 将独立为其 cron 计时。

您确定延迟作业执行代码没有引发异常吗?如果是,则作业将根据重试变量 (Delayed::Worker.max_attempts) 再次排队,因此可能会导致重新安排。

关于heroku - Delayed::Jobs 在 Heroku 上运行两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040462/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com