Код из связанного поста в блоге, кажется, несовместим с 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
с подключением. Таким образом, кажется, что единственное необходимое исправление для обезьян - это повторить попытку несколько раз.