一种将Rail连接切换到delayed_job的方法

时间:2011-09-01 16:54:02

标签: ruby-on-rails delayed-job

我们有一个现有的API,客户端要求我们的服务器提供我们必须从另一个外部服务器获取的信息。当外部服务器需要很长时间(例如10秒)时,它会占用Rails乘客实例10秒钟。

有没有办法将我们的回复呈现传递给delayed_job,以便我可以释放Rails实例?

注意:理想情况下,我们只是更新我们的API并回复我们忙碌的API客户端,并在几秒钟后再次尝试以查看我们是否准备就绪。但是,目前已经有数以千计的客户在进行更改并不适用。

1 个答案:

答案 0 :(得分:2)

处理此问题的常用方法是将作业排队并立即返回,然后轮询或使用某些异步通知框架(如Pusher或Faye)来更新远程客户端。你肯定无法将连接传递给DJ。您可能会调查的另一个途径是使用EventMachine来处理它,即http://railstips.org/blog/archives/2011/05/04/eventmachine-and-passenger/。第三种选择是从远程Web服务预先缓存数据,但这是一种非常依赖于您正在做的事情的途径(例如,授权不是您可以在那里做的事情。)

基本的底线是你正在处理一些架构问题。如果您必须与远程服务通信并在请求周期中输出结果,那么除了更改为更加平坦的后端(如EventMachine或Node.js)之外,您无法做很多事情。

相关问题