我有一个Rails应用程序,不幸的是,在向控制器发出请求之后,需要进行一些处理,这需要一段时间。Rails中为长期运行的任务或请求提供反馈或进度的最佳实践是什么?这些控制器方法通常持续60+秒。
我不关心客户方面..。我计划每隔一秒就有一个Ajax请求,并显示一个进度指示器。我只是不确定Rails的最佳实践,我是否创建了一个额外的控制器?我能做些聪明的事吗?我希望答案集中在服务器端,只使用Rails。
提前谢谢你的帮助。
编辑:
如果重要的话,http请求是针对PDF的。然后,我让Rails与Ruport一起生成这些PDF。问题是,这些PDF非常大,包含了大量的数据。使用背景任务仍然有意义吗?假设一个平均PDF大约需要1分钟到2分钟,这会使我的Rails应用程序在此期间对任何其他服务器请求没有响应吗?
编辑2:
好的,经过进一步的调查,我的Rails应用程序似乎确实对任何其他HTTP请求都没有响应,因为一个请求需要一个大的PDF。因此,我想现在的问题是:使用什么最好的线程/后台机制?它必须是稳定和维护的。我很惊讶Rails没有内置这样的东西。
编辑3:
我读过这一页:http://wiki.rubyonrails.org/rails/pages/HowToRunBackgroundJobsInRails。我很想了解一下使用这些工具的各种经历。
编辑4:
如果有关系的话,我用的是乘客折叠式的“模版”。
编辑5:
我正在为我的开发机器使用Windows 64位;然而,我的生产机器是Ubuntu8.04LTS。我应该考虑为我的开发机器切换到Linux吗?所提出的解决方案在这两方面都能奏效吗?
发布于 2009-02-03 20:29:29
Workling插件允许您在队列中调度后台任务(它们将执行冗长的任务)。从0.3版开始,您可以要求一个工作人员提供它的状态,这将允许您显示一些漂亮的进度条。
另一个很酷的特点是,异步后端可以切换:您可以使用DelayedJobs,派生(经典的叉子),Starling.
发布于 2009-02-19 22:01:36
我有一个非常大的网站,产生大量的大型CSV文件。这些工作有时需要几分钟才能完成。我所做的工作如下:
如果你一次只打算跑一两次,那可能太重了,但如果你想扩大……:)
发布于 2009-02-19 22:20:01
在后台调用./script/runner最适合我。(我也在做PDF生成。)这似乎是最低的公分母,同时也是最简单的实现。以下是我的经历。
https://stackoverflow.com/questions/508678
复制相似问题