Sidekiq同时生成2个axlsx工作簿失败

时间:2019-07-15 09:49:40

标签: ruby-on-rails sidekiq axlsx

我有一些工作用axlsx gem生成excel导出。我在用Sidekiq打电话。

所有作业都具有如下相同的格式:

def perform
  xlsx = create_excel(data)
  Mailer.excel_email(xlsx).deliver_now
end

create_excel在模块内部:

def create_excel(data)
  p = Axlsx::Package.new
  wb = create_xlsx_layout(p.workbook, data)
  p.to_stream
end

邮件发件人是这样的:

def excel_email(xlsx)
  attachments['example.xlsx'] = xlsx.read
  mail(to: ..., 
       subject: ...)
end

现在,如果我执行1个工作,这将非常完美。电子邮件已正确发送,附件也很好。 但是,如果我在Sidekiq中同时执行两项工作,则将同时发送两封电子邮件。第一封电子邮件中的附件仍然不错,但是第二封电子邮件中的附件却出现此错误:

  

Excel在“ FILENAME.xlsx”中发现了不可读的内容。您要恢复此工作簿的内容吗?如果您信任此工作簿的来源,请单击“是”。

     

已删除的记录:工作表属性

我不明白这一点,因为我用每封电子邮件创建了一个新的Axlsx :: Package。有什么想法吗?

如果我每隔2分钟执行一次作业,它就可以工作,但这不是解决方法。

0 个答案:

没有答案