如果在rails中提交表单,则Rest客户端不响应

时间:2014-05-20 05:06:46

标签: jquery ruby-on-rails ruby ajax ruby-on-rails-3

我有form_tag一些text_field_tag,我想要的是,当我通过Ajax提交表单时,它会转到特定控制器的特定操作,我使用rest_client gem可以点击特定的URL并从该URL获取响应,并在ajax请求中发送该响应。

但是当提交表单并转到特定操作时,其他客户端会假设处理GET请求 (基本上是对同一应用程序的另一个控制器的请求)

并返回一些响应,以便我可以在ajax请求中呈现该json响应,但我总是得到Timeout错误,我已经尝试过更改超时但没有成功。

当我在rails console中运行该请求时,我能够从rest_client获得响应。

1 个答案:

答案 0 :(得分:1)

您似乎在单线程容器(如WebBrick)上运行rails应用程序。这意味着服务器一次只能处理单个请求

在您的用例中,请求在控制器中启动,并且发出RestClient调用,然后它被卡在服务器的队列中,等待上一次调用以完成处理,死锁你的网络服务器。

当您从rails console运行RestClient调用时,服务器没有任何请求处理,因此调用通过。

您可以通过更改体系结构以启用接收多个请求(使用EventMachine,或在unicorn服务器上运行您的应用程序)来处理此问题,但它仍然有异味。我建议你找出一种方法来调用另一个控制器的逻辑,而不用向你自己发出一个新的web请求,这是一种过度杀伤,需要很多开销。