我正在尝试在模型中的延迟作业方法中生成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。
答案 0 :(得分:3)
正如@Зелёный已经回答,你在Heroku上的dyno会有一个“只读”文件系统。从某种意义上说,您的dyno重启之间不会保留您的文件,并且无法保证它们会在任何两个请求之间保持不变。这是一个excerpt from the docs:
每个dyno都有自己的短暂文件系统,不与任何其他dyno共享,一旦断开连接就会被丢弃。这个文件系统填充了slug存档,因此一次性dynos可以充分利用应用程序中部署的任何内容。
您可以将#{Rails.root}/tmp
文件夹用作临时文件夹,但需要将文件上传到某些外部存储设备(S3,某些CDN等)。 Heroku有一些插件可以轻松处理。