httparty不使用localhost

时间:2014-06-26 06:54:06

标签: ruby-on-rails

我正在制作包含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

问题:使用此方法向localhost发送请求有什么问题?或任何其他可能的方式吗?

2 个答案:

答案 0 :(得分:2)

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

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

有多种方法可以解决这个问题,例如:

  • 你可以运行你的应用程序的多个实例(这很容易使用诸如战俘或乘客等工具)
  • 您可以将应用分成2个,以便api由单独的应用提供

答案 1 :(得分:1)

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

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

因此HTTParty发出的请求将被屏蔽。