Ruby on Rails:下载路由在生产中不起作用

问题描述 投票:0回答:1

我有一个可以在我的项目上正常工作的下载功能,过程是创建一个包含两个pdf文件的文件夹,将其压缩到tmp文件夹中,然后下载它,当我在生产模式下部署分支时,一切在localhost上都可以正常工作我遇到一个错误:实际上,除了下载功能外,创建和压缩包含报告的文件夹的过程工作正常。

这是route.rb文件:

get 'reports/:id/download'    => 'reports#download_report', as: "download_report"

DownloadReportHelper

def self.zip_pdf(report, path, current_company)
    if File.exist?(temporary_dir_path(report, current_company)+ ".zip")
      FileUtils.rm(temporary_dir_path(report, current_company)+ ".zip")
    end
    directory = File.join( File.dirname( path ) )
    zipfile_name = File.join( File.dirname( path ) ) + '.zip'
    Zip::ZipFile.open( zipfile_name, Zip::ZipFile::CREATE ) do |zipfile|
      Dir[ File.join( directory, '*' ) ].each do |file|
        zipfile.add( File.basename( file ), file )
      end
    end
  end

ReportsController

def download_report
    report = Report.find( params[ :id ] ).decorate
    report_pdfs_path = DownloadReportHelper.generate_public_and_internal_pdf( report, current_company )
    DownloadReportHelper.zip_pdf( report, report_pdfs_path, current_company )
    send_file( "#{ File.dirname(report_pdfs_path) }.zip")
    report.update!(last_downloaded_at: DateTime.current)
  end

生成用于下载报告的链接结构是这样的:

https://company.domainname.com/reports/c2b4e249-175d-4d92-90e1-a7cac5b329c0/download

我有 :

无法访问该网站

任何人都可以帮助您找出问题所在,以及为什么它可以在localhost上正常运行而不能在生产环境中运行?

ruby-on-rails ruby download zip production-environment
1个回答
0
投票

通常,不应在应用程序控制器内部直接处理复杂的文件操作,数据提取,报告等。 您可能会在本地使用少量数据集来摆脱它,但是在生产环境中,这肯定无法扩展,并且大多数Web服务器默认超时时间约为30-45秒。 这意味着,如果您向服务器发送一个http请求,并且服务器花费的时间超过了默认超时时间,它将仅执行超时操作而不响应。 解决此问题的方法是使用后台作业。

Rails提供了ActiveJob,并且要在生产环境中使用它,您需要选择一个后端。 这是一些可能的选择。

https://github.com/mperham/sidekiq/

https://github.com/collectiveidea/delayed_job

https://github.com/brandonhilkert/sucker_punch

© www.soinside.com 2019 - 2024. All rights reserved.