[英]Rake Task timing out on Heroku - Move Rake task to worker using Sidekiq
我最近意识到,我的耙子任务可能会在Heroku上超时,而我碰巧有很多。
这是我的瑞克任务的一个示例:
namespace :test do
desc "Test Rake Task"
task get_list: :environment do
require 'net/ftp'
sftp = Net::SFTP.start('ftp.test.com','luigi', :password => 'pass_word')
records = sftp.download!("luigi/list.xml")
records_hash = Hash.from_xml(records)
records_hash['Report']['Details'].each do |record|
contact = Contact.create(
first_name: record['FirstName'],
last_name: record['LastName'],
date_of_birth: record['DateofBirth']
)
if contact.valid?
puts "Created contact"
else
puts "Invalid contact"
end
end
end
end
我认为我需要将其移交给后台工作者。 完成此任务并将每个联系人添加到数据库可能需要5分钟以上的时间。 我想使用Sidekiq
,但是我从未使用过“ workers”或进行过设置。
通常,我将如何设置Sidekiq
使其在Heroku上运行,然后将上述任务移交给后台工作人员? 我希望这个“工人”或“任务”计划每周一次,星期一上午8点安排。
我的应用程序设置:
Procfile:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
我正在使用Postgres数据库,Rails 4.0.0,ruby 2.0.0,并且正如我之前提到的,我的应用程序托管在Heroku上。
您应该遵循Sidekiq文档并为Heroku进行设置。
您正在运行Sidekiq的一种,我建议使用以下体系结构:
ContactListWorker
:下载列表,为每个列表排队一个联系人更新作业 ContactWorker
:提供详细信息,创建/更新联系人 contacts:nightly_update
将ContactListWorker作业排队 这是一些粗略的伪代码,以显示该体系结构可能是什么样的:
# rake contact:nightly_sync_list
namespace :contacts do
desc "Test Rake Task"
nightly_list_sync: :environment do
ContactListWorker.perform_async
end
end
class ContactListWorker
require 'net/ftp'
include Sidekiq::Worker
def perform()
sftp = Net::SFTP.start('ftp.test.com','luigi', :password => 'pass_word')
records = sftp.download!("luigi/list.xml")
records_hash = Hash.from_xml(records)
records_hash['Report']['Details'].each {|record| ContactWorker.perform_async(record) }
end
end
class ContactWorker
include Sidekiq::Worker
def perform(record)
contact = Contact.create(
first_name: record['FirstName'],
last_name: record['LastName'],
date_of_birth: record['DateofBirth']
)
if contact.valid?
puts "Created contact"
else
puts "Invalid contact"
end
end
结束
这种体系结构允许您异步启动一个后台ContactListWorker
作业。 该作业将完成下载并迅速使N ContactWorker
作业ContactWorker
队。 这使您可以在多个Sidekiq工作器和线程之间展开处理,以分发处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.