Плохая строка перевода MF в локализации на иврите вызывает фатальную ошибку на сайте

Это произошло около 3 дней назад после обновления через веб-интерфейс. Сайту около 2 месяцев, на нём зарегистрировано около 500 пользователей, и до сих пор он работал без проблем.

Я пробовал перезапуск, затем пересборку, затем очистку Redis. Всё ещё получаю белый экран.

Что попробовать дальше? Запустить без плагинов? Удалить и восстановить из резервной копии?

Соответствующие логи:

rails/production_errors: пустой

rails/production:
Запрос GET "/" от 147.234.130.218 в 2024-07-21 08:38:13 +0000
Обработка ListController#unread как HTML
  Рендеринг макета layouts/application.html.erb (Длительность: 114.3 мс | Выделения: 34494)
Завершено с ошибкой 500 Internal Server Error за 264 мс (ActiveRecord: 0.0 мс | Выделения: 88191)

Вы, вероятно, уже пробовали это, но на всякий случай: безопасный режим тоже не сработает?

До сих пор не знал об этом, спасибо, но проблема остаётся.Как я уже говорил, всё выглядит нормально, если я выхожу из системы (технически удаляю куки), но при входе происходит сбой.Признаюсь, у меня нет опыта работы с Rails и настройки более подробного ведения логов.

Что ж, для меня Rails — это… ну, больше, чем просто сложно.

Но ошибка 500 — это ошибка сервера. Велика вероятность, что она вызвана каким-то плагином, но также может быть следствием неправильной конфигурации. Безопасный режим может подсказать, что сломано, если проблема возникает на стороне пользователя. Однако если на сервере сломано что-то, что меняет функциональность, то безопасный режим бессилен.

Конечно, можно отключить все плагины и пересобрать систему, чтобы проверить, исправится ли ситуация, а затем постепенно выяснять, какой именно плагин виноват. Или хотя бы отключить все плагины, не разработанные Discourse, — но даже это не даёт полной уверенности, поскольку не все официальные плагины используются здесь.

Но это отнимает довольно много времени. Возможно, разумнее подождать, пока подключится кто-то, кто действительно разбирается в теме.

Просмотр папки /logs часто позволяет узнать дополнительные детали, либо можно проверить консоль браузера при попытке загрузить страницу.

1 лайк

В консоли браузера (Firefox) ничего подозрительного нет, и единственная строка лога, созданная при запросе, приведена в исходной теме выше.

Какой мой следующий шаг? ./launcher bootstrap и восстановление из резервной копии?

Я думаю, что Дjammy имеет в виду логи Discourse. Можете ли вы войти как администратор?

1 лайк

Я администратор, и при входе информация скудна, поэтому я уточнил внутри…

Да, я имел в виду страницу YourSite/logs. Там ничего не записано об ошибке?

1 лайк

О боже… отсутствие перевода локали является причиной для возврата 500 ошибки?!

РЕДАКТИРОВАНО: Поскольку это стало отчетом об ошибке — я не думаю, что проблема в самих языковых файлах (поскольку копирование файлов *.en.yml в he.yml не помогло). Я предлагаю, чтобы такие проблемы хотя бы обрабатывались корректно и возвращались к английскому языку.

Судя по тому, что я прочитал, нет способа откатить git к последнему рабочему коммиту до этого сбоя? Если это прошло тесты, значит, похоже, нам нужно добавить новый тест. Этот коммит не сработает, если ваш сайт использует «неправильную» локаль. Как мне быстрее всего запустить сайт и как избежать этого в будущем?

Я не до конца уверен, что дело только в отсутствующем локали где-то. По этому скриншоту видно, что у вас также неверно настроены параметры MaxMind.

Мое предположение — что-то ещё сломано, и поэтому всё остальное тоже не работает. Я бы выполнил /.launcher rebuild app и попытался найти, появится ли что-то странное.

Какой язык вы используете в качестве основного?

Иврит

И я пересобирал несколько раз, никаких новостей.

Попробуйте войти в консоль Rails и выполнить SiteSetting.default_locale='en'

Альтернативный вариант: User.find_by(username: 'my-username').update(locale: 'en')

1 лайк

Нужно ли мне выполнить какие-либо команды, чтобы переопределить язык по умолчанию для моих пользователей? Потому что одного этого недостаточно, чтобы что-то изменилось.

Отлично. У меня это сработало. Тексты по-прежнему отображаются корректно (выравнивание справа налево), а интерфейс переведён на английский. Это немного неудобно, но вполне применимо.

Значит, я пройдусь по всем пользователям с помощью этого кода, а когда иврит снова заработает нормально, верну им все настройки обратно?

Прежде чем это делать, я бы потратил немного времени на поиск ошибки в локали и её исправление.

Сначала я хочу запустить сайт. Если перевод в Crowdin сломан, я не смогу его исправить.