Ошибка IntlException после установки

Ошибка IntlException после установки

от Ваня Житников -
Количество ответов: 16

Здравствуйте! Решаю специфическую задачу локального запуска Moodle 3.10 на платформе Эльбрус (основан на Debian), СУБД - Postgresql 11.9,  PHP 7.4.7. Установку произвожу в режиме командной строки, после успешного выполнения "php admin/cli/install.php" и "php admin/cli/install_database.php ..." захожу в браузере на домен и получаю ошибку(см. прикреплённое изображение). Предполагал, что проблема была в параметрах LC_COLLATE и LC_CTYPE для БД, но применение различных параметров не помогло(пробовал ru_RU.utf8 и en_US.utf8). Гугление не помогло, складывается ощущение, что ошибка очень редкая. Заранее спасибо за ответы!

В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

попробуйте без .utf8 в collation.

возможно у вас не хватает какого-то пакета с locales на уровне ОС. Может что-то из разряда http://itword.net/page/debian-ubuntu-utf8

Локали для подключения к постгрес вроде не нужно указывать, и так должно работать.

Если не помогает, пробуйте всё точно так же на чистом debian, и скажите, есть ли отличия

В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Интересно, а что у вас в консоле показывает команда locale ?
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
Вот это:
LANG=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=ru_RU.UTF-8
LC_PAPER=C
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=C
LC_TELEPHONE=C
LC_MEASUREMENT=C
LC_IDENTIFICATION=C
LC_ALL=
В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Ваня Житников -
По locale -a вывод следующий:
C
en_US.utf8
POSIX
ru_RU.koi8r
ru_RU.utf8
В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Вроде все хорошо.
Что мешает сделать отдельный скрипт с кодом аналогичным в moodle (создание объекта Collate) и выполнить из консоли и через web-cервер. Если ошибка повториться, то будет понятно куда смотреть.
А вот если ошибку не удасться воспроизвести скриптом, то это будет означать какие-то проблемы в moodle.
Логи веб-сервера/php не смотрели? Там может быть подсказка.
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
В процессе, пробовал принтить локаль с которой moodle создаёт Collator, почему то было en_AU.utf8, интересно что при попытке захардкодить в конструктор объекта ru_RU локаль ошибка уходила. Почему он берёт не ту локаль пока неясно.
В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Код там такой:
$locale = get_string('locale', 'langconfig');
...
$collator = new Collator($locale);

Он берет ее из файла строк moodle/lang/en/langconfig.php
$string['locale'] = 'en_AU.UTF-8';

IMHO её нужно заменить на en_US.UTF-8 и не забыть сбросить кеш moodle
Но это натуральная подстава!
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
Пробовал вчера что-то подобное провернуть, ошибка IntlException ушла, но установщик выдал сообщение об ошибке инсталляции, что-то вроде "moodlehijacked"
В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
installhijacked - Installation must be finished from the original IP address, sorry. Прикольно улыбаюсь
Не пробовали запустить инсталяцию через web, а не через CLI ? Только базу нужно создать заново, moodledata очистить.
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
Пробовал, но там сходу начинает валиться IntlException.
В ответ на Ваня Житников

Re: Ошибка IntlException после установки

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
А ты случаем не забыл подправить в moodle/lang/en/langconfig.php
$string['locale'] = 'en_AU.UTF-8';
на en_US.UTF-8 перед запуском установки ?
там во всем коде "new Collator" встречается всего 2 раза.

У расширения intl есть возможность через "intl.use_exceptions=0" отключить exception
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
Воу, об этом не знал, сегодня обязательно попробую)
В ответ на Виталий Лавров

Re: Ошибка IntlException после установки

от Ваня Житников -
Интересно следующее, я заменил "new Collator($locale)" на вызов функции "collator_create($locale)" исключение не бросает, но работает тоже так себе, выкидывает сообщение об ошибке с библой ICU U_FILE_ACCESS_ERROR, покопаю в эту сторону.