我有一些工作用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分钟执行一次作业,它就可以工作,但这不是解决方法。