Moodle: ошибки при загрузке курса (зависание процесса восстановления)

Дано: Moodle 3.2 и резервная копия курса в формате mbz. Параметры системы - Windows Server 2012 R2 + MS SQL Server + IIS
Проблема: при попытке загрузить (восстановить) курс страница зависает, долго грузится и в итоге приводит к ошибке "Невозможно отобразить страницу".
Причина, описанная ниже: это некорректный контент курса.



Причины ошибок восстановления могут быть разные (начиная от несовместимости версий Moodle и заканчивая банальной нехваткой места на сервере). Я приведу ту, что возникла у меня. Доступа к исходному курсу (из которого выгружался бэкап) у меня не было, был на руках только файл архива курса в формате mbz.
Восстановление делается по стандартной схеме описанной в данной инструкции - Как загрузить курс в Moodle из резервной копии.
При нажатии на кнопку "Приступить к восстановлению" страница делала вид, что происходит какой-то процесс, но ожидание даже в течении часа ни к чему не приводило (в итоге срабатывал timeout с выводом стандартной ошибки страницы). Если это делалось непосредственно на сервере, то процесс мог зависнуть так, что приходилось делать рестарт веб-сервера (в нашем случае IIS reset).

Включение дебаг режима также не давало результата: никаких вменяемых сообщений об ошибках не выводилось. Логи веб-сервера, логи PHP и системные логи также молчали.

Помог только следующий способ.
(естественно все попытки делаем в тестовой версии moodle)
Когда страница зависает, ожидаем несколько минут, затем останавливаем процесс и заходим в курс. Смотрим, что загрузилось, что нет.
Анализируем последний по порядку загруженный элемент, скорее всего проблема именно в его содержимом, на котором "спотыкается" загрузка курса. Далее можно попытаться изучить его содержимое, если хоть что-то относящееся к нему загрузилось, либо можно пытаться найти его непосредственно в mbz файле и посмотреть контент.
Если надо просто быстро проверить, является ли он причиной зависания, то на этапе выбора элементов перед загрузкой, снимите "флажок" около этого элемента и попробуйте загрузить курс заново. Если не помогло, то уберите загрузку следующего по порядку элемента.
В моем случае это помогло, но при повторной загрузке страница снова зависла. Оказалось, в курсе было три таких элемента (в терминах Moodle - файл и две книги). Т.е. загрузка курса продвинулась дальше, но снова спотыкалась на следующем элементе. Когда эти три элемента были исключены из загрузки, курс успешно восстановился до конца.
По моим предположениям причина была в том, что данные элементы содержали javascript-файлы (возможно срабатывала "отсечка" на уровне безопасности веб-сервера).

Если ничего не помогает, то лучше загружать курс частями и анализировать те части, на которых появляется ошибка.


(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

2 комментария:

  1. Все дело в том, что в коде moodle\backup\util\dbops\restore_dbops.class.php , реализующим восстановление курса написана глупость. Хоть в базе данных Moodle "короткое имя курса" ограничено 255 байт, этот код обрезает Shortname из бэкапа до 100 байт. Причем байт, а не символов - разрезая Unicod символ, если это получится и посередине. Т.е восстановить можно короткие имена на русском языке только до 50 символов длиной.

    ОтветитьУдалить