我正在制作包含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。
问题:使用这种方法向本地主机发送请求有什么问题?或者其他可能的方法?
发布于 2014-06-26 07:14:37
在开发模式中,应用程序的一个实例一次处理一个请求(在生产中,从rails 4开始,线程安全模式默认是启用的,但取决于应用程序的部署方式-这可能没有效果)。更确切地说,Rack::Lock中间件一次只允许我们通过一个请求,所以这会影响到中间件下面的所有内容
如果另一个请求在请求仍在处理时到达,则必须等待第一个请求完成。在您的示例中,这将导致代码等待永远: httparty请求只能在当前请求完成时才能完成,但只有在httparty请求完成时才能完成。
处理这一问题的方法不止一种,例如:
发布于 2014-06-26 07:03:09
如果您是在开发环境中(使用WEBrick或瘦作为服务器),那么它一次只能处理一个请求。
单个Rails进程一次只能处理一个请求。
因此,HTTParty提出的请求将被阻止。
https://stackoverflow.com/questions/24424186
复制相似问题