Здравствуйте,
Всех с праздниками!
Нужна помощь клуба, за время праздников нарисовалась интересная проблема, решить (выявить причину) которую не получается.
Проблема такая. На всех моих сайтах на одном аккаунте шаредхостинга, на других аккаунтах того же хостера, к которым у меня есть доступ перестала работать проверка обновлений. Т.е иногда приходят письма с уведомлением о наличии обновлений, но в отчете проверенных модулей всего несколько. Остальные серые с надписями "Сбой при попытке получить обновления". Если проверку запустить вручную, то в процессе могут быть проверены обновления несколько модулей, но основная масса со сбоем проверки. Сверху сообщение об ошибке "Не удалось получить информацию об обновлении для nn проектов". Если из проверенных модулей есть модули с обновлениями, они (обновления) скачиваются и устанавливаются нормально. Один из таких проблемных сайтов скачал на локал - все работает как надо. Есть один сайт, который я разрабатывал у себя, а сейчас он на другом хостинге - у меня проверка обновлений не работает, на другом хостинге все нормально.
Понятно, что дело в хостере, но он отморозился. Понятно, что от него надо валить, ситуация с каждым годом все ближе к уровню плинтуса, но пока не могу.
Что и как я могу проверить, в чем причина такой паталогии? Какие есть мысли?
p.s. недавнее критическое обновление накатил практически сразу на все сайты, проблем вроде не было особых.
Комментарии
если я правильно понял, то у меня была такая же проблема на reg.ru - http://www.drupal.ru/node/113920, правда все происходило через раз, то работают обновления, то нет.
Смирился, если сбой, то он со временем проходит...
Спасибо за ответ, но похоже, у меня не тот случай.
Вставил в ноду строку: <?php print_r(drupal_http_request('https://drupal.org/'));?>
Ответ:
[protocol] => HTTP/1.0 [status_message] => OK [headers] => Array ( [age] => 2957 [cache-control] => no-cache [content-language] => en [content-type] => text/html; charset=utf-8 [date] => Fri, 09 Jan 2015 09:06:27 GMT [etag] => "1420791386.255-1" [expires] => Fri, 09 Jan 2015 09:06:26 GMT [front-end-https] => on [last-modified] => Fri, 09 Jan 2015 08:16:26 GMT [server] => nginx/1.4.4 [vary] => Cookie,Accept-Encoding [via] => 1.1 varnish [x-cache] => HIT [x-cache-hits] => 386 [x-cache-svr] => www2.drupal.org [x-drupal-cache] => HIT [x-varnish] => 681697622 681626534 [connection] => close )
Вставил <strong><?php print_r(drupal_http_request('https://updates.drupal.org/')); ?></strong>
Ответ
stdClass Object ( [request] => GET / HTTP/1.0 User-Agent: Drupal (+http://drupal.org/) Host: updates.drupal.org [data] =>
Hi there!
If you can see this your IP is not blocked.
[protocol] => HTTP/1.0 [status_message] => OK [headers] => Array ( [accept-ranges] => bytes [age] => 0 [cache-control] => no-cache [content-type] => text/html; charset=UTF-8 [date] => Fri, 09 Jan 2015 09:17:44 GMT [etag] => "30e0390-88-4ddbced701de9" [expires] => Fri, 09 Jan 2015 09:17:43 GMT [front-end-https] => on [server] => nginx/1.4.4 [vary] => Accept-Encoding [via] => 1.1 varnish [x-cache] => MISS [x-cache-svr] => www1.drupal.org [x-varnish] => 381326672 [content-length] => 136 [connection] => close ) [code] => 200 )
Один раз вылетела ошибка о таймауте. Короче хостер что-то изменил, теперь нужно гадать. Можно как-то логировать процесс обновления?
В предыдущем сообщении так и не смог добиться корректного отображения сообщения - глючит все...
Нашел обсуждение https://www.drupal.org/node/956474, но там тоже ни к чему конкретному не пришли
Если я правильно понял, дело в таймауте соединения с сервером обновлений. Вероятнее всего, хостер изменил сетевую инфраструктуру и процесс обновления вываливается просто по превышению времени. Косвенным доказательством служит тот факт, что процесс проверки всегда отваливается на 11%, но если в файле update.module в строке define('UPDATE_MAX_FETCH_ATTEMPTS', 2); 2 поменять на 6 например, то процесс всегда идет дальше. Но все равно отваливается. Больше 6 не делал, т.к. это наверное неправильно.
Извечный вопрос - Что делать? Можно как-то проверить время соединения сайта с сервером обновления? Сделать traceroute?
Подозрения подтвердились по поводу timeout.
В коде update модуля есть такая строка
$xml = drupal_http_request($url);
где $url=http://updates.drupal.org/release-history/userdelete/7.x?site_key=wu5EoI...
если в ноду вставить
<?php print_r(drupal_http_request('http://updates.drupal.org/release-history/userdelete/7.x?site_key=wu5EoI...'));?>
то выводится
stdClass Object (
Но иногда и что-то (небольшая часть) выводится. поэтому иногда часть модулей проверяется на обновления)
Нет, ставил чистый Друпал из репозитория хостера (из админки), только ядро. Та же песня.
ага, чистый из репозитория хостера - взаимоисключающие параграфы. Я вообще не понимаю, что такого в друпале, чтобы не смочь его установить самому и тем более, что в нём такого, чтобы на какие-то хостинги нужен был какой-то особенный друпал? Имхо, если хостинг не может работать с друпалом, то скорее всего и на любых других пхп-движках у него будут проблемы.
Вы наверное невнимательно прочитали выше. Автоматом Друпал я поставил только для эксперимента. И проблема не в установке, и в проверке обновлений. Про другие движки нечего сказать не могу. Кроме того, проблема встречается не часто, но регулярно, и у нас, и у других. И скорее всего, проблема именно в хостингах.
И цель этого топика именно найти причину.
Зашел на сервер по SSH, посмотрел пинг, трассировку, попробовал скачать (wget) xml c информацией об обновлении - все ок, никаких видимых косяков.
Что я понял на этот момент. Причина отказа проверки обновлений - таймаут соединения с сервером обновления Друпал при попытке получить данные по конкретному модулю. В чем причина, понять не могу, не хватает квалификации. Временное решение такое - в файле update.module ядра в строке define('UPDATE_MAX_FETCH_ATTEMPTS', 2); 2 поменял на 30. Проверка работает гораздо дольше и на обновления проверяются почти все проекты (модули). Непосредственно обновление работает нормально. Если кто может помочь, буду рад. (могу отвечать с задержками)
Интересно как решилась проблема. У меня сейчас тоже самое, что на локальном, что на хостинге.
Такая же фигня.
Помогла только правка модуля Update. Но это же неправильно...