如何防止Rails控制器在进行Web服务调用时挂起

时间:2016-07-15 18:20:26

标签: ruby-on-rails web-services faraday

我有一个Rails控制器,当用户加载特定页面时我会调用它。控制器调用第三方Web服务。但是,当Web服务关闭时,我的Rails控制器就会挂起。我无法导航到其他页面,注销或刷新页面......所有这些任务都等待Web服务调用在执行之前完成。如果Web服务调用永远不会完成,我必须重新启动我的Rails应用程序才能再次运行。

是否有一种防止这种情况发生的标准方法?我正在使用Faraday gem来进行Web服务调用。我想我可以在进行Web服务调用时设置超时值。但是,理想情况下,我希望任何用户操作导航到另一个页面立即停止此Web服务调用。这可能吗?

1 个答案:

答案 0 :(得分:1)

我相信这种情况正在发生,因为您可能正在使用Rack web实现,它一次只能处理一个请求。 Unicorn就像是事件驱动的地方。非常像Node。你应该考虑先用超时来修复它。因此,如果您使用法拉第,则可以执行req.options.timeout = 5之类的操作来暂停。

然后我推荐使用Puma。如果这不是一个选项,您应该调整服务器设置以允许一次允许多个连接。对于Unicorn,我相信它是worker_processes