Проблема с отсутствием изображения значка

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

У меня возникла проблема с разделом значков. Я изменил некоторые значки и добавил туда изображения. Спустя 6 месяцев я восстановил резервную копию, и всё работает нормально, за исключением раздела значков. Я пробовал войти в безопасном режиме и отключить все плагины, но проблема остаётся прежней. Как я могу восстановить раздел значков с именами и изображениями по умолчанию?

Отображается следующая ошибка:

Сообщение (2 сообщения)

NoMethodError (неопределённый метод `url' для nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
app/controllers/application_controller.rb:484:in `serialize_data'
app/controllers/badges_controller.rb:30:in `index'
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/enforce_hostname.rb:23: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:480:in `_serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

Окружение

HTTP HOSTS: site.com

Другие изображения восстановились корректно?

Вы убедились, что в резервную копию включены загрузки?

Вы используете S3 для хранения загрузок? Если нет, пожалуйста, войдите в контейнер и перейдите в /shared/uploads/default/original/1X. Есть ли там файлы?

Да, я не использую S3, и всегда включал изображения вложений в резервную копию…

Что меня сейчас интересует, так это как сбросить изображения значков??

Из коробки, насколько мне известно, нет способа «сбросить изображения значков».

Первым делом я бы проверил, что значки, у которых отсутствовали изображения, хотя бы были восстановлены. Если вы проверите таблицу badges, вы сможете получить ID изображения в поле image_upload. Затем используйте этот ID в таблице uploads, чтобы получить URL изображения, например так:

select url from uploads where id = <badge-upload-id>

URL выглядит примерно так: /uploads/default/original/1X/c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg, и оттуда вы можете извлечь имя файла, в данном случае это будет c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg.

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

cd /
find . -name c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

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

Версия Discourse из резервной копии слишком сильно отличается от версии Discourse, в которую вы выполняете восстановление?

Возможно, кто-то другой в сообществе знает об этом больше, хотя.

Отлично, но как узнать отсутствующий URL или имя бейджа?

Я не могу найти, как узнать отсутствующий URL или имя изображения бейджа.

Следуйте инструкции по ссылке Discourse Data Explorer, чтобы установить плагин Data Explorer. С его помощью вы сможете изучить таблицу бейджей. Сосредоточьтесь на ваших пользовательских бейджах.

Я установил это, но не нашел таблицу значков;

вот ошибка, которую я получаю при открытии профиля администратора:

Сообщение

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/users_controller.rb:92: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/enforce_hostname.rb:23: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

Привет @f1r4s
У меня возникла та же проблема. Вам удалось её решить?

Я полагаю, что эта проблема была решена в этой теме: