如何在 Ruby on Rails 中完成延迟作业后执行 ajax 回调?
Posted
技术标签:
【中文标题】如何在 Ruby on Rails 中完成延迟作业后执行 ajax 回调?【英文标题】:How to do an ajax callback after a Delayed Job has finished in Ruby on Rails? 【发布时间】:2011-01-14 04:16:03 【问题描述】:我允许我网站上的用户旋转他们的照片。我通过对旋转照片的 Delayed_Job 进程(通过 Heroku)的 ajax 调用来完成此操作。在他们按下“旋转照片”后,我展示了一个加载微调器。但我的问题是:让我的页面知道 Delayed_Job 何时完成以便我可以加载新照片的最佳方式是什么?
我是否需要对我的服务器进行连续的 ajax 轮询以确定延迟作业是否完成?或者有什么方法可以实现一个 ajax 回调到我的页面,当延迟作业完成时通知我的页面?
提前致谢。
【问题讨论】:
你真的需要使用Delayed_Job来旋转单张图片吗? 可能不是,所以这绝对是一个考虑因素。 【参考方案1】:有很多方法可以处理这种事情。你可以像你提到的那样做 ajax 轮询,你可以使用comet 方法,你基本上保持连接打开,直到服务器上的任何内容完成,或者你甚至可以全力以赴使用web sockets(可能不过这个任务有点矫枉过正)。
没有套接字,目前无法让您的服务器在没有客户端请求的情况下向客户端发送消息。
在任何情况下,您都应该决定是否需要或想要将任务置于后台,以保证处理轮询/彗星/套接字的所有额外工作。旋转图像根本不需要很长时间。根据您是否负担得起锁定服务器进程的费用,仅在前台进行图像处理(而不是延迟作业)会简单得多。然后,当对该操作的 ajax 请求完成时,您就知道任务已完成。
【讨论】:
以上是关于如何在 Ruby on Rails 中完成延迟作业后执行 ajax 回调?的主要内容,如果未能解决你的问题,请参考以下文章
在 Ruby on Rails 应用程序/内存泄漏中分析延迟作业任务