首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用localhost的httparty

不使用localhost的httparty
EN

Stack Overflow用户
提问于 2014-06-26 06:54:06
回答 2查看 2.1K关注 0票数 4

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

我用HTTParty打电话。当我做下面的事情时,它工作得很好。

代码语言:javascript
复制
response = HTTParty.get('https://google.com')

但是,当我尝试调用API时,它仍然保持处理状态,因为浏览器正在发送请求,即使我等待了15分钟,但它没有呈现任何内容,我看到了rails控制台,但是没有任何请求的迹象。

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

代码语言:javascript
复制
response = HTTParty.get('http://localhost:3000/api/v1/score_sheets/9')

就连我都试过这个

代码语言:javascript
复制
response = HTTParty.get('http://0.0.0.0:3000/api/v1/score_sheets/9')

这也是:

代码语言:javascript
复制
response = HTTParty.get('http://127.0.0.1:3000/api/v1/score_sheets/9')

通过浏览器https://localhost:3000/api/v1/score_sheets/9进行直接请求,这将返回正确的JSON

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

EN

回答 2

Stack Overflow用户

发布于 2014-06-26 07:14:37

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

如果另一个请求在请求仍在处理时到达,则必须等待第一个请求完成。在您的示例中,这将导致代码等待永远: httparty请求只能在当前请求完成时才能完成,但只有在httparty请求完成时才能完成。

处理这一问题的方法不止一种,例如:

  • 您可以运行您的应用程序的多个实例(这是很容易的工具,如pow或乘客)
  • 您可以将应用程序拆分为2,以便api由一个单独的应用程序提供。
票数 2
EN

Stack Overflow用户

发布于 2014-06-26 07:03:09

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24424186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档