gpt4 book ai didi

ruby-on-rails - Mechanize - 接收 Errno::EMFILE:打开的文件太多 - 一天后套接字(2)

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:11 24 4
gpt4 key购买 nike

我正在运行一个应用程序,该应用程序使用 mechanize 每隔一段时间从 RSS 提要中获取一些数据。

它作为 heroku worker 运行,大约一天后我收到以下错误:Errno::EMFILE: 打开的文件太多 - socket(2)

我无法在 mechanize 中找到“关闭”方法,是否需要执行任何特殊操作才能关闭我的浏览器 session ?

下面是我创建浏览器+阅读信息的方式:

  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

并实际获取信息:

  response = mechanize_browser.get(url)

然后在响应后关闭:

  def close_mechanize_browser
@mechanize_browser = nil
end

提前致谢!

最佳答案

由于您无法手动关闭 Mechanize 的每个实例,您可以尝试将 Mechanize 作为一个 block 调用。根据the docs :

After the block executes, the instance is cleaned up. This includes closing all open connections.

因此,与其将 Mechanize.new 抽象为自定义函数,不如尝试通过 start 类方法运行 Mechanize,它应该会自动关闭完成请求后的所有连接:

Mechanize.start do |m|
m.get("http://example.com")
end

关于ruby-on-rails - Mechanize - 接收 Errno::EMFILE:打开的文件太多 - 一天后套接字(2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com