我有一个 Rails 控制器方法,它只在同一服务器上打开一个文件:
open 'http://lvh.me:3000/feeds/madonna.rss'
大约 60% 的时间,当我启动服务器并点击此控制器方法时,“打开”调用超时:
Net::ReadTimeout: Net::ReadTimeout
其余时间打开就好了。
似乎如果第一个请求在启动服务器后有效,它将继续处理后续请求。如果第一个请求失败,它将继续失败。
只有当要打开的文件位于发出请求的同一台服务器上时,才会出现故障。换句话说,当我更改 URL 以调用同一端点但在登台服务器上时,它似乎每次都有效。
open-uri 和 FeedJira 的行为完全相同。
服务器尝试向同一台服务器发出请求时会出现一些阻塞问题吗?任何想法如何解决这个问题或进一步调试它?
这是调用以生成提要的控制器方法:
def add_feed
url = params['url']
puts "FEEDJIRA"
open url
# feed = Feedjira::Feed.fetch_and_parse(url)
# eventually return response... but we timeout on the line above
end
这是上面的“url”命中的控制器(即“ http://lvh.me:3000/feeds/madonna.rss ”)以生成提要:
class FeedsController < ApplicationController
def show
respond_to do |format|
format.rss { render :layout => false }
end
end
end
这是日志:
env_host: lvh.me:3000
Host: lvh.me
(0.9ms) BEGIN
SQL (0.7ms) UPDATE "users" SET "last_seen_at" = $1, "updated_at" = $2 WHERE "users"."id" = $3 [["last_seen_at", "2018-01-08 19:47:29.215953"], ["updated_at", "2018-01-08 19:47:29.218610"], ["id", 3071]]
(1.6ms) COMMIT
FEEDJIRA
Started GET "/feeds/madonna.rss" for 127.0.0.1 at 2018-01-08 11:47:29 -0800
Completed 500 Internal Server Error in 120051ms (ActiveRecord: 7.3ms)
Net::ReadTimeout (Net::ReadTimeout):
app/controllers/registrations_controller.rb:105:in `add_feed'