如何在Ruby on Rails中使用Delayed Job后执行ajax回调?

3
我允许网站用户旋转他们的照片。我通过一个ajax调用Delayed_Job进程(通过Heroku)来实现这一点,以旋转照片。当他们按下“旋转照片”按钮时,我会显示一个加载动画。但我的问题是:如何让我的页面知道Delayed_Job何时完成,以便我可以加载新的照片?
我需要持续进行ajax轮询以确定Delayed_Job是否完成吗?还是有任何方式可以实现ajax回调到我的页面,以通知我的页面Delayed_Job已经完成?
提前感谢。

你真的需要使用Delayed_Job来旋转一张图片吗? - cam
可能不会发生,所以这绝对是需要考虑的。 - Sean Ahrens
1个回答

5

有多种方法可以处理这种情况。您可以像您提到的那样使用ajax轮询,您可以使用comet方法,即保持连接打开,直到服务器上的任何内容完成,或者您甚至可以全力以赴使用web sockets(对于此任务来说可能有点过度杀伤)。

如果没有sockets,目前没有办法让您的服务器向客户端发送消息,而不需要客户端请求它。

无论如何,您应该决定是否需要或想要将任务放在后台,以证明处理轮询/彗星/sockets的所有额外工作是否值得。旋转图像不应该花费太长时间。根据您是否能够锁定服务器进程,只需在前景中执行图像操作(而不是延迟作业)就会简单得多。然后,当针对该操作的ajax请求完成时,您就知道任务已完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接