2014-06-26 200 views
2

我正在制作rails包含API的应用程序,我希望我的控制器调用该API而不是处理ActiveRecordhttparty不能与localhost一起工作

我使用HTTParty拨打电话。当我做了以下工作正常。

response = HTTParty.get('https://google.com') 

但是当我尝试了我的API调用它不断处理状态的浏览器发送请求,即使我等了15分钟,但它呈现什么,我看到铁轨控制台,但没有任何要求的迹象。

对于我的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

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

回答

1

如果你在发展环境(使用类似的WEBrick或细如服务器),那么它只能一次处理一个请求。

单滑轨过程只能一次处理一个请求。

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

+0

提供在同一时间,我只发送一个请求。 –

+0

@ G.B你提出要求,并告诉轨,使另一个请求,那么另一个请求将被阻止。 – xdazz

+0

哦。好的,我知道了。但如何处理这件事? –

2

在发展模式,你的应用程序的一个实例一次处理一个请求(在生产中,由于轨道4的,线程安全模式是由但是这取决于应用程序的部署,这可能没有任何效果默认启用)。更确切地说,Rack :: Lock中间件一次只允许通过一个请求,所以这会影响中间件以下的所有内容。

如果在请求仍在处理的过程中有另一个请求到达,那么它必须等待第一个请求完成。你的情况,这将导致你的代码永远的等待:当当前请求已完成httparty请求只能完成,但是当httparty请求完成,只能发生。

还有就是要解决这个问题的方法不止一种,例如:

  • 你可以运行你的应用程序的多个实例(这很容易用工具,如战俘或乘客)
  • 你可能分裂你的应用程序到2,这样的API可以由一个单独的应用程序
相关问题