使用axlsx

时间:2016-05-21 08:40:04

标签: ruby-on-rails heroku delayed-job axlsx

我正在尝试在模型中的延迟作业方法中生成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。

1 个答案:

答案 0 :(得分:3)

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

  

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

您可以将#{Rails.root}/tmp文件夹用作临时文件夹,但需要将文件上传到某些外部存储设备(S3,某些CDN等)。 Heroku有一些插件可以轻松处理。