После обновления версии я обнаружил, что не могу загрузить карточку пользователя, нажав на его аватар, а при входе в настройки личной информации появляется сообщение, что страница не найдена.
Я обновился вчера, и карточки пользователей загружаются у меня без проблем.
Проверьте безопасный режим. Если всё в порядке, возможно, проблема в одной из ваших тем или компонентов темы?
Не могли бы вы предоставить любые ошибки из консоли?
Я нахожусь в безопасном режиме, но всё равно не могу загрузиться. Вот информация из моего лога:
Не удалось обработать исключение в промежуточном ПО приложения исключений: ActiveRecord::StatementInvalid : PG::UndefinedTable: ОШИБКА: отношение "gamification_leaderboard_cache_1_all_time" не существует СТРОКА 1: ...p.t
ActiveRecord::StatementInvalid (PG::UndefinedTable: ОШИБКА: отношение "gamification_leaderboard_cache_1_all_time" не существует СТРОКА 1: ...p.total_score, p.position FROM "users" INNER JOIN gamificati.
Это может иметь значение, но я имел в виду логи браузера. Можете ли вы их предоставить?
То есть консоль браузера (часто открывается по F1).
topic-creator-avatar.hbr:1 [THEME 300 'Сводка последних тем'] Ошибка компиляции: неизвестное расширение файла 'hbr' (discourse/connectors/topic-list-before-columns/topic-creator-avatar.hbr)
(аноним) @ topic-creator-avatar.hbr:1
[Новое] Используйте Copilot в Edge для объяснения ошибок консоли: нажмите
чтобы объяснить ошибку.
Узнать больше
Больше не показывать
composer-action-title.js:62 ℹ️ Discourse v3.5.0.beta5-dev — https://github.com/discourse/discourse/commits/7820dd2b8f — Ember v5.12.0
post-placeholder.js:53 [ПЛАГИН discourse-chain-topics] Уведомление об устаревании: Определение классов-коннекторов через registerConnectorClass устарело. См. https://meta.discourse.org/t/32727 для более современных паттернов. [id устаревания: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(аноним) @ topic-custom-field-initializer.js:32
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(аноним) @ composer-action-title.js:62
(аноним) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(аноним) @ start-app.js:4
(аноним) @ discourse-boot.js:13
(аноним) @ discourse-boot.js:1
post-placeholder.js:53 [ПЛАГИН discourse-chain-topics] Уведомление об устаревании: Определение классов-коннекторов через registerConnectorClass устарело. См. https://meta.discourse.org/t/32727 для более современных паттернов. [id устаревания: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(аноним) @ topic-custom-field-initializer.js:83
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(аноним) @ composer-action-title.js:62
(аноним) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(аноним) @ start-app.js:4
(аноним) @ discourse-boot.js:13
(аноним) @ discourse-boot.js:1
post-placeholder.js:53 [ПЛАГИН discourse-chain-topics] Уведомление об устаревании: Определение классов-коннекторов через registerConnectorClass устарело. См. https://meta.discourse.org/t/32727 для более современных паттернов. [id устаревания: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(аноним) @ topic-custom-field-initializer.js:141
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(аноним) @ composer-action-title.js:62
(аноним) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(аноним) @ start-app.js:4
(аноним) @ discourse-boot.js:13
(аноним) @ discourse-boot.js:1
discourse-home-page.js:79 ошибка discourse-home-page: недопустимый путь ""
s @ discourse-home-page.js:79
initialize @ discourse-home-page.js:42
(аноним) @ composer-action-title.js:62
(аноним) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(аноним) @ start-app.js:4
(аноним) @ discourse-boot.js:13
(аноним) @ discourse-boot.js:1
one-version.js:10 УСТАРЕЛО: Компоненты с отдельно разрешаемыми шаблонами устарели. Мигрируйте либо на совместно расположенные файлы js/ts + hbs, либо на gjs/gts. Попытка поиска 'template:components/sidebar-theme-toggle'. [id устаревания: component-template-resolving] Это будет удалено в ember-source 6.0.0. См. https://deprecations.emberjs.com/id/component-template-resolving для подробностей.
(аноним) @ one-version.js:10
(аноним) @ base.js:71
(аноним) @ deprecate.js:100
(аноним) @ base.js:71
(аноним) @ deprecate.js:100
(аноним) @ base.js:71
l @ index.js:49
(аноним) @ render-tags.js:60
(аноним) @ base.js:71
u @ index.js:49
(аноним) @ base.js:71
(аноним) @ base.js:71
(аноним) @ base.js:71
(аноним) @ bookmark.js:114
(аноним) @ base.js:71
(аноним) @ form-template-validation.js:54
(аноним) @ base.js:71
s @ post-placeholder.js:53
(аноним) @ base.js:71
r @ base.js:71
c @ deprecate.js:100
k @ upload.js:65
h @ binary.js:7
(аноним) @ theme-setting.js:6
(аноним) @ theme-setting.js:6
lookupComponent @ theme-setting.js:6
(аноним) @ theme-setting.js:6
A @ theme-setting.js:6
o @ theme-setting.js:6
(аноним) @ theme-setting.js:6
compile @ theme-setting.js:6
ef @ theme-setting.js:6
(аноним) @ theme-setting.js:6
compile @ theme-setting.js:6
compile @ backup-codes.js:33
(аноним) @ backup-codes.js:33
evaluate @ backup-codes.js:33
evaluateSyscall @ backup-codes.js:33
evaluateInner @ backup-codes.js:33
evaluateOuter @ backup-codes.js:33
next @ backup-codes.js:33
_execute @ backup-codes.js:33
execute @ backup-codes.js:33
sync @ backup-codes.js:33
(аноним) @ theme-setting.js:6
(аноним) @ theme-setting.js:6
tA @ backup-codes.js:33
_renderRoots @ theme-setting.js:6
_renderRootsTransaction @ theme-setting.js:6
_renderRoot @ theme-setting.js:6
_appendDefinition @ theme-setting.js:6
appendOutletView @ theme-setting.js:6
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(аноним) @ start-app.js:4
(аноним) @ discourse-boot.js:13
(аноним) @ discourse-boot.js:1
includes.js?v=116e2a6fd81c286e004e2a0afb03baa1:840
GET https://www.tometo.me/u/shen_hualuo/card.json 500 (Внутренняя ошибка сервера)
(аноним) @ includes.js?v=116e2a6fd81c286e004e2a0afb03baa1:840
send @ jquery.js:7408
ajax @ jquery.js:7408
a @ base.js:71
(аноним) @ named-references.js:49
e @ named-references.js:49
A @ base.js:71
(аноним) @ moment.js:257
(аноним) @ group.js:15
(аноним) @ named-references.js:49
e @ named-references.js:49
getAndRemove @ group.js:15
findDetails @ moment.js:257
findByUsername @ moment.js:257
_showCallback @ item.js:166
(аноним) @ topic-link.js:12
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
end @ client-error-handler.js:88
_runExpiredTimers @ client-error-handler.js:88
setTimeout
setTimeout @ client-error-handler.js:88
_installTimerTimeout @ client-error-handler.js:88
_reinstallTimerTimeout @ client-error-handler.js:88
_later @ client-error-handler.js:88
later @ client-error-handler.js:88
T @ bookmark.js:114
_show @ topic-link.js:12
_showCardOnClick @ topic-link.js:12
_cardClickHandler @ topic-link.js:12
_run @ client-error-handler.js:88
_join @ client-error-handler.js:88
join @ client-error-handler.js:88
p @ bookmark.js:114
(аноним) @ bookmark.js:114
includes.js?v=116e2a…04e2a0afb03baa1:840
GET https://www.tometo.me/u/shen_hualuo.json 500 (Внутренняя ошибка сервера)
(аноним) @ includes.js?v=116e2a…04e2a0afb03baa1:840
send @ jquery.js:7408
ajax @ jquery.js:7408
a @ base.js:71
(аноним) @ named-references.js:49
e @ named-references.js:49
A @ base.js:71
(аноним) @ moment.js:257
(аноним) @ group.js:15
(аноним) @ named-references.js:49
e @ named-references.js:49
getAndRemove @ group.js:15
findDetails @ moment.js:257
afterModel @ post-placeholder.js:53
runAfterModelHook @ topic-link.js:12
(аноним) @ topic-link.js:12
k @ named-references.js:49
w @ named-references.js:49
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(аноним) @ client-error-handler.js:88
Promise.then
(аноним) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
(аноним) @ hashtag-autocomplete.js:158
T @ named-references.js:49
resolve @ topic-link.js:12
T @ form-template-validation.js:54
getTransitionByIntent @ topic-link.js:12
transitionByIntent @ topic-link.js:12
doTransition @ topic-link.js:12
transitionTo @ topic-link.js:12
_doTransition @ upload.js:65
transitionTo @ binary.js:7
(аноним) @ theme-setting.js:6
l @ UIPlugin.js:138
click
Похоже, вы не находились в безопасном режиме.
Этот компонент, судя по всему, вызывает проблему:
topic-creator-avatar.hbr:1 [THEME 300 'Свежие темы'] Ошибка компиляции: неизвестное расширение файла 'hbr' (discourse/connectors/topic-list-before-columns/topic-creator-avatar.hbr)
(anonymous) @ topic-creator-avatar.hbr:1
Это связано с тем, что шаблоны hbr (raw) больше не поддерживаются.
Обратитесь к автору этой темы.
@manuel, ты тоже с этим сталкивался?
Похоже, эти сообщения связаны.
Кажется, плагин Gamification изменяет данные пользователя и вызывает ошибку.
Это почти наверняка объясняет, почему карточка пользователя не загружается.
Похоже, у вас есть несколько проблем, связанных с дополнениями, а не с ядром Discourse.
Рекомендую временно отключить:
- Плагин Gamification
- Любой компонент темы ([THEME 300 ‘Последние темы вкратце’]), вызывающий другую ошибку в браузере (его нужно переписать, чтобы избежать использования шаблонов .hbr)
пока вы не решите эти проблемы.
Рекомендую сообщить об ошибке Gamification в теме Gamification.
Так как это официальный плагин, вы также можете сообщить об ошибке в категории bug (но не забудьте добавить тег gamification). ![]()
Это правда.
В любом случае, эта тема сейчас затрагивает две проблемы, и их, вероятно, следует разделить на две отдельные.
Проблема с загрузкой карточки пользователя, скорее всего, связана с системой геймификации, поэтому, возможно, стоит использовать эту тему именно для неё. Добавлен тег gamification.
(ладно, ТЕПЕРЬ это запутывает — интерфейс редактирования метаданных темы изменился!)
Да.
![]()
Это произошло, когда я пытался установить резервную копию. Доступ к карточкам пользователей и страницам пользователей не работал, пока я не удалил таблицу лидеров из резервной копии.
редактирование: к слову, похоже, мой скриншот не открывается в лайтбоксе? Загруженное изображение было шириной 1693 пикселя, но отображается только в 690 пикселей.
Это кажется очень жестким. Неужели нет более легкого решения?
Это, возможно, связано:
Да, странно. Вот оригинал для тех, кто хочет реально прочитать текст ![]()
Возможно. Эта миграция удаляет версионированные представления кэша, у которых в конце добавлен _x (где x — цифра). Но таблица, которую она пропускает, является неверсионированной (без _x).
@sheng_hualuo, не могли бы вы запустить это из консоли Rails?
DiscourseGamification::LeaderboardCachedView.regenerate_all
gamification_leaderboard_cache_1_all_time разве это не версия 1?
Кажется, по какой-то причине соглашение об именовании было изменено.
Нет, это идентификатор таблицы лидеров. Всё подробно объяснено в сообщении коммита, на который вы ссылаетесь.
Также обратите внимание на регулярное выражение 'gamification_leaderboard_cache_[0-9]+_[a-zA-Z_]+_[1-9]$'.
Ах, теперь всё начинает обретать смысл. Значит, версия с номером (э-э-э) была отброшена, но по какой-то причине новая версия (э-э-э) не была реализована.
У меня нет полного лога трассировки, но, по-моему, ошибка возникает при сериализации gamification_score для карточки пользователя.
Учитывая временный характер этих материализованных представлений, запрос к оценке не должен вызывать ошибку во всей системе; при отсутствии представления должен срабатывать откат к «оценке по умолчанию».
В коде проверки существования материализованного представления есть ошибка. Он сообщает, что представление существует, хотя на самом деле его нет (по крайней мере, в текущей схеме public). Из-за этого попытка запроса к несуществующему представлению приводит к ошибке.
Скорее всего, произошло следующее: материализованное представление присутствовало в схеме backup, созданной в процессе восстановления, но отсутствовало в схеме public. Схема backup сохраняется некоторое время после восстановления.
У меня уже готов PR с исправлением.