【发布时间】:2018-11-20 08:27:44
【问题描述】:
我有一个 Rails 应用程序,我正在尝试将大型 PDF 的创建传递给后台进程,并允许用户在完成后查看它。这是一个与 combine_pdf gem 结合并传递给delayed_job 的多页文档。
我有 3 个操作:第一个操作创建并保存文件,第二个操作通过异步请求以短延迟重复调用以检查文件是否存在,第三个操作在浏览器中显示 PDF。
第二部分有问题,因为它使用File.exist?('my_file.pdf'),但在文件完成保存之前返回true。随后显示的用于查看 PDF 的链接会导致错误 (ActionController::MissingFile)。该文件实际上会在大约 10 秒后变为可用,此时链接可以正常工作。
我猜文件在检查时仍在写入?如何检查文件保存是否完成,文件是否可以读取?
【问题讨论】:
-
就我个人而言,我会保存一些对delayed_job进程的引用,并在读取文件之前检查作业是否已完成,但实现某种临时文件并在保存后移动/重命名它更容易.
标签: ruby-on-rails ruby pdf delayed-job