Rails Sidekiq延迟任务
Rails Sidekiq delay task
我想在一个 sidekiq worker 中做一个 for
循环,每个循环之间有 5 分钟的延迟。但是当我尝试将它部署到 Heroku 时,我的应用程序崩溃了
class DelayedCallWorker
include Sidekiq::Worker
include Sidekiq::Status::Worker
def perform(survey_id)
@twilio_sid = ENV['TWILIO_ACCOUNT_SID']
@twilio_token = ENV['TWILIO_AUTH_TOKEN']
@twilio_number = ENV['TWILIO_NUMBER']
@survey = Survey.find(survey_id)
phone_number = @survey.call_center_number
@client = Twilio::REST::Client.new @twilio_sid, @twilio_token
@leads = @survey.leads.where(call_needed: true)
@leads.each do |lead|
@call = @client.account.calls.create(
:from => @twilio_number,
:to => lead.phone,
:url => "http://example.com/connect?number=#{phone_number}"
)
sleep, 180
end
end
end
如果我注释掉 sleep, 180
一切正常,但不会有延迟。
我还尝试了一种变体,我循环遍历控制器中的引线,并使用 perform_in(5.minutes, survey_id)
创建每个工人延迟更长的工人,但这同样使 heroku 崩溃。
有谁知道在 sidekiq worker 中进行延迟的最佳方法是什么?
这绝对不是您想在 Sidekiq 中执行的那种任务。或者至少,不像你那样设计。
Sidekiq 是一名后台工作者。如果您保留一名工作人员 运行,它会使队列饱和并且不会为其他工作人员释放 space。
您有两个选择:
- 使用每 5 分钟执行一次的类似 cron 的进程,例如使用 Clockwork
- 运行 一个 Sidekiq 任务,每个任务队列的末尾将在未来 5 分钟内执行另一个作业(使用 perform_at Sidekiq 功能)
我想在一个 sidekiq worker 中做一个 for
循环,每个循环之间有 5 分钟的延迟。但是当我尝试将它部署到 Heroku 时,我的应用程序崩溃了
class DelayedCallWorker
include Sidekiq::Worker
include Sidekiq::Status::Worker
def perform(survey_id)
@twilio_sid = ENV['TWILIO_ACCOUNT_SID']
@twilio_token = ENV['TWILIO_AUTH_TOKEN']
@twilio_number = ENV['TWILIO_NUMBER']
@survey = Survey.find(survey_id)
phone_number = @survey.call_center_number
@client = Twilio::REST::Client.new @twilio_sid, @twilio_token
@leads = @survey.leads.where(call_needed: true)
@leads.each do |lead|
@call = @client.account.calls.create(
:from => @twilio_number,
:to => lead.phone,
:url => "http://example.com/connect?number=#{phone_number}"
)
sleep, 180
end
end
end
如果我注释掉 sleep, 180
一切正常,但不会有延迟。
我还尝试了一种变体,我循环遍历控制器中的引线,并使用 perform_in(5.minutes, survey_id)
创建每个工人延迟更长的工人,但这同样使 heroku 崩溃。
有谁知道在 sidekiq worker 中进行延迟的最佳方法是什么?
这绝对不是您想在 Sidekiq 中执行的那种任务。或者至少,不像你那样设计。
Sidekiq 是一名后台工作者。如果您保留一名工作人员 运行,它会使队列饱和并且不会为其他工作人员释放 space。
您有两个选择:
- 使用每 5 分钟执行一次的类似 cron 的进程,例如使用 Clockwork
- 运行 一个 Sidekiq 任务,每个任务队列的末尾将在未来 5 分钟内执行另一个作业(使用 perform_at Sidekiq 功能)