我想在sidekiq工作者中进行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工作人员中查看延迟的最佳方法是什么?
答案 0 :(得分:1)
这绝对不是您想要在Sidekiq中执行的任务。或者至少,不像你那样设计。
Sidekiq是一名背景工作者。如果让一名工人继续工作,它将使队列饱和,而不是为其他工人腾出空间。
您有两种选择: