我有form_tag
一些text_field_tag
,我想要的是,当我通过Ajax提交表单时,它会转到特定控制器的特定操作,我使用rest_client gem可以点击特定的URL并从该URL获取响应,并在ajax请求中发送该响应。
但是当提交表单并转到特定操作时,其他客户端会假设处理GET
请求
(基本上是对同一应用程序的另一个控制器的请求)
并返回一些响应,以便我可以在ajax请求中呈现该json响应,但我总是得到Timeout错误,我已经尝试过更改超时但没有成功。
当我在rails console
中运行该请求时,我能够从rest_client获得响应。
答案 0 :(得分:1)
您似乎在单线程容器(如WebBrick)上运行rails应用程序。这意味着服务器一次只能处理单个请求。
在您的用例中,请求在控制器中启动,并且发出RestClient调用,然后它被卡在服务器的队列中,等待上一次调用以完成处理,死锁你的网络服务器。
当您从rails console
运行RestClient调用时,服务器没有任何请求处理,因此调用通过。
您可以通过更改体系结构以启用接收多个请求(使用EventMachine,或在unicorn
服务器上运行您的应用程序)来处理此问题,但它仍然有异味。我建议你找出一种方法来调用另一个控制器的逻辑,而不用向你自己发出一个新的web请求,这是一种过度杀伤,需要很多开销。