Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用axlsx在延迟作业方法中创建excel_Ruby On Rails_Heroku_Delayed Job_Axlsx - Fatal编程技术网

Ruby on rails 使用axlsx在延迟作业方法中创建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

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

正如@CharStyleёёыы已经回答的那样,您在Heroku上的dyno将有一个“只读”文件系统。从某种意义上说,您的文件不会在dyno重新启动之间持久化,也不能保证它们会在任何两个请求之间持久化。以下是一份:

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


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

据我所知,Heroku是只读系统,在应用程序运行时,您不能向系统写入文件。您必须在temp FolderThank@Uzbekjon中写入文件。该文件将在临时文件夹中保留多长时间。不保证。最多在dyno进程运行之前。但这也不能保证,因为heroku可以用新的dyno进程替换您的dyno进程。