Ошибка 404 предпочтений профиля: профиль администратора не работает

У меня эта проблема уже месяц; я пробовал несколько раз обновлять, мигрировать базу данных в новую и т.д., но ничего не помогает.

Проблема была у администратора; я пытался перенести данные администратора в новый аккаунт — та же ошибка: я не могу открыть страницу настроек или профиля и получаю ошибку 404.

Я видел похожие сообщения, но никто не объясняет, как это исправить, и проблема существует уже три года.

Та же проблема, и они упоминают, что она исправлена, но это слишком старая запись, и никто не объясняет, как её исправить.

Что это значит?

Используете ли вы какие-либо плагины?

Видите ли вы что-либо в /logs?

2 лайка

Я отключил все плагины и восстановил базу данных, но ошибка осталась. У меня нет идей… Вот почему я пишу сюда.

Вам нужно предоставить нам некоторую информацию для работы.

2 лайка

В логах показано следующее

Исключение в задаче: getaddrinfo: Нет адреса, связанного с именем хоста
2:11
NoMethodError (неопределенный метод `url' для nil:NilClass) app/models/badge.rb:306:in `image_url' (eval):10:in `_fast_attributes' lib/freedom_patches/ams_include_without_root.rb:54:in `include!' lib/free
Сообщение

NoMethodError (неопределённый метод `url' для nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Трассировка стека

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

Окружение

HTTP HOSTS: site.com

Пытались ли вы отключить значки и посмотреть, решит ли это проблему?

Да, я пробовал, но проблема осталась

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

Не совсем уверен, что правильно понял суть на 100%. Проблема в том, что вы не можете получить доступ к панели администратора?

Да, я уже упоминал ранее, что столкнулся с этой проблемой месяц назад и пробовал множество способов её исправить, но все они не увенчались успехом.

Я вижу экран администратора, но не могу открыть профиль администратора или настройки — выводится ошибка 404.

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

Не знаю, как их отозвать или удалить… Есть ли какое-нибудь руководство, чтобы попробовать?

Вы можете редактировать или отзывать значки пользователя на странице администратора/пользователя (если у вас есть доступ к ней):

Или вы можете удалить пользовательский значок в разделе «Значки» области администратора:

[YourSite]/admin/badges

В разделе предпочтений или профиля я не могу получить доступ (ошибка 404); а в разделе значков — (ошибка 500);

Код ошибки: ошибка 500

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

Сообщение

Необработанное [object Object]
URL: https://site.com/assets/vendor-3c473d73e5222f7710764282fcc17d73997b7fbd37e0c12afc050b80693ceee2.js
Строка: 36
Столбец: 180628
Расположение окна: https://site.com/admin/badges

Трассировка стека



Окружение

HTTP HOSTS: site.com

Я не думаю, что существует простой способ «сброса» для значков, даже из консоли Rails.

Как далеко вы продвинулись с запросом Data Explorer, рекомендованным в другой теме? Вам удалось определить, какое изображение значка вызывает проблему?

Нет, я не проверял. Если возможно, не могли бы вы посмотреть?

После небольшого экспериментирования мне удалось воспроизвести эту ошибку (или, возможно, что-то похожее). Я попробовал использовать консоль для вставки значения «null» в поле image_upload_id в таблице Badge, но вместо этого оно заполнилось нулём. Это заблокировало мой тестовый сайт очень похожим образом на то, что вы описали.

Я «исправил» это, заменив все значения image_upload_id на ‘1’. Это позволило мне снова получить доступ к моему профилю и разделу «Значки», но теперь мне нужно вручную вернуть все значки обратно только в виде иконок и т. д.

Чтобы проверить, является ли ваша проблема аналогичной, можете ли вы открыть свой data-explorer, создать новый запрос и вставить туда следующее (а затем выполнить):

Select name, image_upload_id
FROM badges b
Order By id desc

Я также выяснил, что в консоли для корректной работы нужно использовать ‘nil’, а не ‘null’. :slightly_smiling_face:

Это исправило мои повреждённые записи без необходимости прохода по ним вручную:

Badge.where('image_upload_id=0').find_each do |b|
b.image_upload_id = nil
b.save
end

Не зная точно, в чём именно заключается ваша проблема, я не могу с уверенностью сказать, что это исправит её таким же образом — хотя, возможно, вариант «заменить всё на nil» подойдёт и вам?

1 лайк

Привет, @jammydodger,

У меня появляется что-то вроде этого:

Я вижу, что у большинства бейджей значение NULL, за исключением трёх, у которых значение 17.

После повторной проверки профиля ошибка снова появляется в «журнале» (logs):

Message

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/users_controller.rb:103:in `show_card'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

Env

HTTP HOSTS: site.com

Мне стоит выбрать что-то другое, или, может быть, ты предпочитаешь сам заглянуть внутрь?

1 лайк

Запрос в Data Explorer не устранит проблему, но полученная информация может помочь. :+1:

Если вы комфортно работаете с Rails Console, попробуйте следующее, чтобы сбросить значение 17 в null (не забудьте сделать резервную копию на всякий случай):

Перейдите в Rails Console:

cd /var/discourse 
./launcher enter app
rails c

Вставьте следующее:

Badge.where('image_upload_id=17').find_each do |b|
b.image_upload_id = nil
b.save
end

Надеемся, это разблокирует раздел «Значки» и профиль, чтобы вы могли начать заново. :+1::crossed_fingers:

2 лайка

Знания не имеют ценности, если вы не используете и не делитесь ими, чувак! Ценю твое время, бро… Исправлено!

2 лайка