Ошибка 500 на странице категории и главной после обновления до 2.6

Здравствуйте,

Я только что обновил свой форум (работавший с 2017 года) до версии 2.6 (с версии 2.4).
Во время обновления я заметил, что PostgreSQL 9.5 был заменён на PostgreSQL 12.

Операция перестроения завершилась без ошибок, но на главной странице появляется ошибка 500 (или сообщение «Oops»).
Та же ошибка возникает на странице категории.

Административная панель работает, профиль пользователя работает, список пользователей работает, отдельная публикация работает.
Однако раздел «Топ рефералов» в административной панели не работает.

У меня нет идей, как это исправить.
Спасибо большое.

Установлены ли какие-либо плагины?

Есть что-нибудь в /logs?

Вы правы, у меня много раз возникала одна и та же ошибка в /logs:

NoMethodError (неопределенный метод hex' для nil:NilClass) app/models/upload.rb:180:in base62_sha1’
app/models/upload.rb:174:in short_path' app/models/upload.rb:146:in short_path’
app/models/group.rb:767:in flair_url' (eval):5:in _fast_attributes’
lib/freedom_patches/ams_include_without_root.rb:54:in include!' lib/freedom_patches/ams_include_without_root.rb:57:in include!’
lib/freedom_patches/ams_include_without_root.rb:57:in include!' app/controllers/application_controller.rb:440:in serialize_data’
app/controllers/application_controller.rb:449:in render_serialized' lib/topic_list_responder.rb:16:in block (2 levels) in respond_with_list’
lib/topic_list_responder.rb:9:in respond_with_list' app/controllers/list_controller.rb:102:in block (2 levels) in class:ListController
app/controllers/list_controller.rb:107:in public_send' app/controllers/list_controller.rb:107:in block (2 levels) in class:ListController
app/controllers/application_controller.rb:340:in block in with_resolved_locale' app/controllers/application_controller.rb:340:in with_resolved_locale’
lib/middleware/omniauth_bypass_middleware.rb:68:in call' lib/content_security_policy/middleware.rb:12:in call’
lib/middleware/anonymous_cache.rb:336:in call' config/initializers/100-quiet_logger.rb:19:in call’
config/initializers/100-silence_logger.rb:31:in call' lib/middleware/enforce_hostname.rb:22:in call’
lib/middleware/request_tracker.rb:176:in `call’

К сожалению, переход в безопасный режим и отключение всего не решает проблему.
Ошибка по-прежнему сохраняется.

Я многократно сталкивался с этой ошибкой в логах:

NoMethodError (undefined method hex' for nil:NilClass) app/models/upload.rb:180:in base62_sha1’ app/models/upload.rb:174:in short_path' app/models/upload.rb:146:in short_path’ app/models/group.rb:

И в панели администратора некоторые метрики (Топ тем с наибольшим количеством переходов) выдают ошибку:
«Извините, запрос занял слишком много времени»

Я уже сталкивался с этим: проблема заключалась в отсутствии изображений категорий. Discourse пытается получить их размеры и не удаётся.

Попробуйте удалить изображения категорий.

Попытка восстановления завершена ошибкой:

[2020-08-27 10:06:41] Приостановка Sidekiq…
[2020-08-27 10:06:41] Ожидание завершения Sidekiq выполнения заданий (до 60 секунд)…
[2020-08-27 10:38:40] ИСКЛЮЧЕНИЕ: ОШИБКА: обнаружена взаимная блокировка (deadlock)
ДЕТАЛИ: Процесс 594 ожидает блокировку AccessExclusiveLock для отношения 1113165 базы данных 16569; заблокирован процессом 1617.
Процесс 1617 ожидает блокировку AccessShareLock для отношения 1113221 базы данных 16569; заблокирован процессом 594.
ПОДСКАЗКА: См. детали запроса в серверном журнале.
КОНТЕКСТ: SQL-запрос “ALTER TABLE public.categories SET SCHEMA backup;”
PL/pgSQL функция inline_code_block, строка 11, оператор EXECUTE

У нас нет изображения категории :frowning:

Хм :thinking:
Возможно, флейр группы?

Как узнать, что проблема в групповом flair, и как её решить?
Спасибо большое.

Попробуйте удалить или повторно загрузить аватар-флейр группы из любых групп и посмотрите, решит ли это проблему.

Вот оно, @michaeld! Отличная работа. @Olivier_Baillon, отметьте сообщение Майкла как решение!

Если у кого-то ещё возникла такая проблема, сделайте следующее:

cd /var/discourse
./launcher enter app
rails c
Group.all.pluck(:id,:flair_icon,:flair_upload_id)
# для групп, у которых `flair_upload_id` есть значение, например:
g=Group.find(GROUP_ID_FROM_THE_LIST) # это id, а не flair_upload_id
g.flair_upload
g.save

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

СПАСИБО @michaeld и @pfaffman
Я бы никогда не нашел это сам.
Огромное спасибо