Рубин на рельсах: загрузка маршрута не работает в производстве - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть функция загрузки, которая отлично работает в моем проекте, процесс состоит в том, чтобы создать папку, содержащую два файла 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

Я получил:

Этот сайт недоступен

любой может помочь выяснить, что с этим не так и почему он отлично работает на локальном хосте, но не работает?

1 Ответ

0 голосов
/ 02 ноября 2018

Сложные манипуляции с файлами, извлечение данных, создание отчетов и т. Д. В целом не должны обрабатываться непосредственно в ваших контроллерах приложений. Вы могли бы справиться с этим локально с небольшим набором данных, но в производственной среде это точно не будет масштабироваться, и время ожидания большинства веб-серверов по умолчанию составляет около 30-45 секунд. Это означает, что если вы отправляете HTTP-запрос на сервер, и сервер занимает больше времени, чем тайм-аут по умолчанию, он просто сделает это, тайм-аут и не отвечает. Способ справиться с этим - использовать фоновые задания.

Rails предоставляет ActiveJob , и для использования его в работе вам нужно будет выбрать бэкэнд. Вот несколько возможных вариантов для этого.

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

https://github.com/collectiveidea/delayed_job

https://github.com/brandonhilkert/sucker_punch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...