Gee*_*esu 2 ruby ruby-on-rails mechanize heroku
我正在运行一个应用程序,它使用mechanize来经常从RSS提要中获取一些数据.
它作为一个heroku工作者运行,大约一天后我收到以下错误:Errno :: EMFILE:打开文件太多 - socket(2)
我无法在机械化中找到"关闭"方法,为了关闭浏览器会话,我需要做些什么特别的事情吗?
以下是我创建浏览器+读取信息的方法:
def mechanize_browser
@mechanize_browser ||= begin
agent = Mechanize.new
agent.redirect_ok = true
agent.request_headers = {
'Accept-Encoding' => "gzip,deflate,sdch",
'Accept-Language' => "en-US,en;q=0.8",
}
agent
end
end
Run Code Online (Sandbox Code Playgroud)
并实际获取信息:
response = mechanize_browser.get(url)
Run Code Online (Sandbox Code Playgroud)
然后在回复后关闭:
def close_mechanize_browser
@mechanize_browser = nil
end
Run Code Online (Sandbox Code Playgroud)
提前致谢!
由于您手动无法关闭每个实例Mechanize,因此可以尝试Mechanize作为块调用.根据文件:
块执行后,清理实例.这包括关闭所有打开的连接.
因此,不要抽象Mechanize.new到自定义函数中,而是尝试Mechanize通过start类方法运行,该方法应在完成请求后自动关闭所有连接:
Mechanize.start do |m|
m.get("http://example.com")
end
Run Code Online (Sandbox Code Playgroud)