Ruby on rails 使用axlsx在延迟作业方法中创建excel
我试图在模型中的延迟作业方法中生成excel文件。这在当地很管用。我正在使用调度程序运行heroku中的延迟作业。作业在未生成excel的情况下成功完成 我的延迟作业方法如下所示:Ruby on rails 使用axlsx在延迟作业方法中创建excel,ruby-on-rails,heroku,delayed-job,axlsx,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", "Pro
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。正如@CharStyleёёыы已经回答的那样,您在Heroku上的dyno将有一个“只读”文件系统。从某种意义上说,您的文件不会在dyno重新启动之间持久化,也不能保证它们会在任何两个请求之间持久化。以下是一份: 每个dyno都有自己的临时文件系统,不与任何其他dyno共享,一旦断开连接就会丢弃。该文件系统填充了slug归档,因此一次性dynos可以充分利用应用程序中部署的任何内容
您可以将
#{Rails.root}/tmp
文件夹用作临时文件夹,但需要将文件上载到一些外部存储(S3、一些CDN等)。Heroku有一些易于处理的插件。据我所知,Heroku是只读系统,在应用程序运行时,您不能向系统写入文件。您必须在temp FolderThank@Uzbekjon中写入文件。该文件将在临时文件夹中保留多长时间。不保证。最多在dyno进程运行之前。但这也不能保证,因为heroku可以用新的dyno进程替换您的dyno进程。