Ruby on rails httparty不使用本地主机
我正在制作包含API的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
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由单独的应用程序提供