Ruby on rails httparty不使用本地主机

Ruby on rails httparty不使用本地主机,ruby-on-rails,Ruby On Rails,我正在制作包含API的rails应用程序,我希望我的控制器调用这些API,而不是处理ActiveRecord 我正在使用HTTParty拨打电话。当我做以下操作时,它工作正常 response = HTTParty.get('https://google.com') 但是,当我尝试调用API时,它会保持处理状态,因为浏览器正在发送请求,即使我等待了15分钟,但它没有呈现任何内容,我看到了rails控制台,但没有任何请求的迹象 对于我的API调用,我使用以下方法: response = HTTP

我正在制作包含API的
rails
应用程序,我希望我的控制器调用这些API,而不是处理
ActiveRecord

我正在使用
HTTParty
拨打电话。当我做以下操作时,它工作正常

response = HTTParty.get('https://google.com')
但是,当我尝试调用API时,它会保持处理状态,因为浏览器正在发送请求,即使我等待了15分钟,但它没有呈现任何内容,我看到了rails控制台,但没有任何请求的迹象

对于我的API调用,我使用以下方法:

response = HTTParty.get('http://localhost:3000/api/v1/score_sheets/9')
就连我也试过:

response = HTTParty.get('http://0.0.0.0:3000/api/v1/score_sheets/9')
这也是:

response = HTTParty.get('http://127.0.0.1:3000/api/v1/score_sheets/9')
通过浏览器发出直接请求
https://localhost:3000/api/v1/score_sheets/9
返回右侧的
JSON


问题:使用此方法向本地主机发送请求有什么问题?或者任何其他可能的方法?

如果您处于开发环境中(使用WEBrick或thin作为服务器),那么它一次只能处理一个请求

单个Rails进程一次只能处理一个请求。


因此,HTTParty发出的请求将被阻止。

在开发模式下,应用程序的一个实例一次处理一个请求(在生产中,从rails 4开始,默认情况下启用线程安全模式,但这可能没有效果,具体取决于应用程序的部署方式)。更准确地说,Rack::Lock中间件一次只允许我们通过一个请求,因此这会影响该中间件下面的所有内容

如果另一个请求在请求仍在处理时到达,则必须等待第一个请求完成。在您的情况下,这会导致代码永远等待:httparty请求只能在当前请求完成时完成,但这只能在httparty请求完成时发生

解决这一问题的方法不止一种,例如:

  • 您可以运行应用程序的多个实例(使用pow或passenger等工具很容易)
  • 您可以将应用程序拆分为2个,以便api由单独的应用程序提供

我一次只发送一个请求。@G.B如果您发出一个请求并告诉rails发出另一个请求,那么另一个请求将被阻止。噢。好的,明白了。但是如何处理这个问题呢?@G.B在同一个应用程序中,你不需要与http协议通信。那么,如果我想调用保存在app/api/v1/score_sheets文件中的api呢?意味着如何请求api并获得响应?