【发布时间】:2019-11-10 16:54:04
【问题描述】:
我有一个 Rails 应用程序,不幸的是,在向控制器发出请求后,它必须进行一些需要一段时间的处理。在 Rails 中为长期运行的任务或请求提供反馈或进度的最佳实践是什么?这些控制器方法通常持续 60 多秒。
我不关心客户端...我计划每隔一秒左右发出一个 Ajax 请求并显示一个进度指示器。我只是不确定 Rails 的最佳实践,我要创建一个额外的控制器吗?有什么聪明的我可以做的吗?我希望答案只集中在使用 Rails 的服务器端。
提前感谢您的帮助。
编辑:
如果重要,http 请求是针对 PDF 的。然后我让 Rails 与 Ruport 一起生成这些 PDF。问题是,这些 PDF 非常大并且包含大量数据。使用后台任务仍然有意义吗?假设平均 PDF 需要大约 1 到 2 分钟,这是否会使我的 Rails 应用程序在此期间无法响应任何其他服务器请求?
编辑 2:
好的,经过进一步调查,似乎我的 Rails 应用程序在收到大 PDF 请求后确实对任何其他 HTTP 请求没有响应。 所以,我想现在的问题变成了:最好使用什么线程/后台机制? 它必须是稳定和维护的。我很惊讶 Rails 没有内置这样的东西。
编辑 3:
我已阅读此页面:http://wiki.rubyonrails.org/rails/pages/HowToRunBackgroundJobsInRails。我很想了解使用这些工具的各种体验。
编辑 4:
如果重要的话,我正在使用Passenger Phusion“modrails”。
编辑 5:
我的开发机器使用的是 Windows Vista 64 位;但是,我的生产机器是 Ubuntu 8.04 LTS。我应该考虑为我的开发机器切换到 Linux 吗?提出的解决方案是否适用于两者?
【问题讨论】:
-
关于编辑 5:考虑使用 VirtualBox/Vagrant 进行开发。由于绝大多数开发都是在 unix 机器上完成的,而且您的开发和生产环境可以相同,因此您将省去很多麻烦。
-
@riley - 如果我的生产环境是 CentOS,而我的开发机器运行的是 Linux Mint,该怎么办?我也应该使用虚拟机吗?
标签: ruby-on-rails ruby