Решение проблем с автоматическим обновлением, если у вас «превышен таймаут…»

Иногда так бывает что сервер, где установлен ваш сайт имеет плохой канал до сервера, с которого обновляется, либо каналы просто сильно загружены. Сегодня в рассылке wp-testers увидел что такое бывает не только «у нас» и там же приведено такое решение — создать плагин, который увеличивает таймайт, либо можно эту функцию вставить куда нибудь в движок или другой активный плагин.

Выглядела ошибка примерно так:

Загрузка не удалась.: Operation timed out after 30000 milliseconds with 15483145 out of 2077956 bytes received

Вот собственно говоря пример такой функции, где 300 — это то количество секунд, которое мы хотим установить вместо дефолтных 30-ти.

function filter_update_timeout($r)
{
        if (30 == $r['timeout'])
                $r['timeout'] = 300;
        return ($r);
}

add_filter('http_request_args','filter_update_timeout');

Автор решения: Peter Westwood http://westi.wordpress.com
Я уже видел что у кого то не хотел обновляться автоматически движок, такое было «когда все разом ломанулись» автообновляться с версии 2.7 до 2.7.1, чем вызвали глобальную просадку моего канала связи. После этого я сделал эксперимент и поставил редирект на уровне вебсервера на другое зеркало на одном хостинге. Проблема с таймаутом сразу пропала, но так не работает автообновление у тех, у кого при обновлении запрашивается ввод адреса сервера, логина и пароля фтп. Там просто писалось «Found» и ничего не качалось (хотя у кого то я видел и работало). Сейчас я снова вернул ссылку на «первое зеркало» и просто увеличил таймаут до 3-х минут. Этого более чем достаточно. В дистрибутиве я уже добавил эту функцию как в ru_RU.php, так и в плагин включения автообновлений, новую версию которого (а также обновленный файл ru_RU.php) можно скачать здесь. Файл ru_RU.php нужно поместить в wp-content/languages, а плагин lecactus_edition_update_url.php в wp-content/plugins. А можно сделать проще — выбрать автоматическую переустановку движка и все файлы у вас обновятся сами. Там же я вложил в архив (ссылка выше) еще и файл big_timeout.php, который вы можете просто установить на любую(не только мою сборку) версию WP2.7 и новее, чтобы увеличить таймаут (грубо говоря функция приведенная выше просто оформлена как плагин готовый). Возможно поможет вам при обновлении плагинов объемных.

Связанные записи

3 комментария на запись “Решение проблем с автоматическим обновлением, если у вас «превышен таймаут…»”

  1. Lecactus 24 февраля 2009 в 1:16

    А тем временем выпустили еще один такой плагин http://wordpress.org/extend/plugins/wordpressplugin-upgrade-time-out-plugin/#post-9266, только прикрутили к нему еще и панель настроек (имхо это лишнее). проще один раз прописать в тело плагина и забыть

  2. Serg 27 февраля 2009 в 23:44

    Эта.. подозреваю сия фича может работать не только с вордпрессом.

    Если не трудно — можно логику работы add_filter описать? (из кода понятно, что функция filter_update_timeout возвращает увеличенный таймаут, а вот как его "прикрутить" к любому скрипту — я тут не догоняю)

  3. Merkys 20 января 2010 в 23:05

    Спасибо!
    Теперь обновил wp нормально =) .