ConnectionPool :: Ошибка (соединения не проверены) - PullRequest
0 голосов
/ 26 июня 2018

Я получаю эту ошибку, пытаясь очистить сайт с помощью механизации.

Это мой код:

agent = Mechanize.new

agent.user_agent_alias = 'Mac Safari'

agent.keep_alive = false

page = agent.get('https://web.archive.org/web/20170417084732/https://www.cs.auckland.ac.nz/~andwhay/postlist.html')

page.links_with(:text => 'post').each do |link|
  post = link.click
  Article.create(
    user_id: 1,
    title: post.css('title'),
    text: post.at("//div[@itemprop = 'description']")
  )
end

Я также использовал этот код , чтобы избежать ошибки "Too Many Connection Reset".

1 Ответ

0 голосов
/ 19 июля 2018

Код из связанного поста в блоге, кажется, несовместим с v3.0.0 из net-http-persistent gem. Обратите внимание, что Mechanize v2.7.6 (текущая версия на момент написания этой статьи) совместима с net-http-persistent> = v2.5.2, который включает v3.0.0.

Краткий ответ - выполнить одно из следующих действий:

  • Pin net-http-persistent to v2.9.4
  • (эксперимент) Удалить вызов self.http.shutdown в строке 44 связанного сообщения в блоге

Длинный ответ таков: гем net-http-persistent начал использовать гем connection_pool в версии 3.0.0, который изменил поведение Net::HTTP::Persistent#shutdown (он же self.http.shutdown в Mechanize::HTTP::Agent). Новое поведение вызывает ConnectionPool::Error («никакие соединения не проверены»), если запрос сделан после того, как shutdown был вызван.

Однако, просматривая код обоих net-http-persistent v2.9.4 и v3.0.0, кажется, что self.http.shutdown, возможно, и не было необходимости в первую очередь. Кажется, что основное назначение shutdown - вызывать finish для каждого из соединений. Как в v2.9.4, так и в v3.0.0, когда Net::HTTP::Persistent#request спасается от исключения Errno::ECONNRESET (первоначальная причина всего этого), он повторяет попытку только один раз, а затем вызывает Net::HTTP::Persistent#request_failed. request_failed в свою очередь вызывает Net::HTTP::Persistent#finish с подключением. Таким образом, кажется, что единственное необходимое исправление для обезьян - это повторить попытку несколько раз.

...