使用axlsx在延迟作业方法中创建Excel

我试图在模型中的延迟作业方法中生成一个excel文件。 这在当地工作得很好。 我正在使用调度程序在heroku中运行延迟的作业。 乔布斯成功完成而没有生成excel。

我的延迟工作方法如下:

def self.generate_excel Axlsx::Package.new do |p| p.workbook.add_worksheet(:name => "Stock Details") do |sheet| sheet.add_row ["S.No", "ProductId", "Title"] products.each_with_index do |prods, index| sheet.add_row ["1", "1234", "product title"] end end p.serialize("#{Rails.root}/app/views/stock_details/stock_details.xlsx") end 

我正在使用delayedjob 4.1。

正如@Зелёный已经回答,你在Heroku上的dyno会有一个“只读”文件系统。 从某种意义上说,您的dyno重启之间不会保留您的文件,并且无法保证它们会在任何两个请求之间保持不变。 以下是文档的摘录 :

每个dyno都有自己的短暂文件系统,不与任何其他dyno共享,一旦断开连接就会被丢弃。 这个文件系统填充了slug存档,因此一次性dynos可以充分利用应用程序中部署的任何东西。

您可以使用#{Rails.root}/tmp文件夹作为临时文件夹,但需要将文件上传到某些外部存储(S3,某些CDN等)。 Heroku有一些插件,易于操作。