首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails应用程序在后台运行长任务的最佳实践?

问Rails应用程序在后台运行长任务的最佳实践?
EN

Stack Overflow用户
提问于 2009-02-03 19:59:31
回答 14查看 22.1K关注 0票数 33

我有一个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吗?所提出的解决方案在这两方面都能奏效吗?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-02-03 20:29:29

Workling插件允许您在队列中调度后台任务(它们将执行冗长的任务)。从0.3版开始,您可以要求一个工作人员提供它的状态,这将允许您显示一些漂亮的进度条。

另一个很酷的特点是,异步后端可以切换:您可以使用DelayedJobs,派生(经典的叉子),Starling.

票数 24
EN

Stack Overflow用户

发布于 2009-02-19 22:01:36

我有一个非常大的网站,产生大量的大型CSV文件。这些工作有时需要几分钟才能完成。我所做的工作如下:

  • 我有一个包含所请求文件的详细信息的作业表。当用户请求一个文件时,请求进入该表,用户被带到一个“作业状态”页面,其中列出了他们的所有作业。
  • 我有一个rake任务,它运行所有未完成的作业(作业模型上的类方法)。
  • 我在另一个处理这些作业的盒子上单独安装了rails。这个盒子只做工作,外部世界无法访问。
  • 在这个单独的框中,cron作业每60秒运行一次所有未执行的作业,除非作业仍然从上次调用中运行。
  • 用户的作业状态页面自动刷新以显示作业的状态(作业框在作业启动、运行、然后完成时由作业框更新)。工作完成后,结果文件将显示一个链接。

如果你一次只打算跑一两次,那可能太重了,但如果你想扩大……:)

票数 6
EN

Stack Overflow用户

发布于 2009-02-19 22:20:01

在后台调用./script/runner最适合我。(我也在做PDF生成。)这似乎是最低的公分母,同时也是最简单的实现。以下是我的经历。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/508678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档