我是Resque的新手。我想在Resque工作者的帮助下制作和发送excel文件。我在工人类中编写了该代码。现在我已将控制器函数内的worker调用为:
Resque.redis = Redis.new(:host => "#{Rails.configuration.redis_machine}", :port => Rails.configuration.redis_port)
Resque.enqueue(MakeAndSend,records,email)
此处记录是要打印到excel文件的数据行,而email是要将此excel文件发送到的用户的邮件ID。
但问题是我的代码卡在这一行,以下行只在作业结束时执行。但据我所知,通过研究resque,以下行应立即执行。
所以,如果有人帮我解决这个问题,我将非常感激。
编辑上面的记录实际上是对象的集合。所以我没有任何选择在这里发送ID。此外,redis服务器没有受到攻击。
答案 0 :(得分:0)
看着它,我不认为这就是问题所在的那一行 - 它可能是那条线背后的东西,比如工人档案或其他东西
我可以看到你可能会遇到的一个主要问题,还有其他问题:
- >您将变量(ActiveRecord对象)传递给Resque队列 - 发送变量的id是惯例,因此worker文件可以在运行时调用数据库
以下是我们的Resque队列的一些实时代码:
#app/models/message.rb (this gets called when we run "send_broadcast" function)
def broadcast!
self.subscribers.each do |subscriber|
Resque.enqueue(MailoutQueue, id, subscriber.id)
end
end
#app/workers/mailout_queue.rb
class MailoutQueue
@queue = :mailer
def self.perform(message_id, recipient_id)
MessageMailer.send_message(message_id, recipient_id).deliver
end
end
MessageMailer.rb
只是一个标准的邮件发件人文件
如果您可以发布您的工作人员文件代码,它将帮助我们了解真正问题的位置,以便我们能够妥善修复!