Problema con imagen de insignia faltante

Hola,

Tengo un problema con la sección de insignias. He modificado algunas insignias y he añadido algunas imágenes allí; después de 6 meses, restauré una copia de seguridad y todo funciona bien, excepto la sección de insignias. Intenté iniciar sesión en modo seguro y deshabilitar todos los complementos… pero el problema sigue igual. ¿Cómo puedo restaurar las secciones de insignias con el nombre e imágenes predeterminados?

El error que me aparece es:

Mensaje (se informaron 2 copias)

NoMethodError (método no definido `url' para 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/middleware/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'

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/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'

Entorno

HTTP HOSTS: site.com
1 me gusta

¿Se restauraron correctamente otras imágenes?

¿Te aseguraste de incluir las cargas en la copia de seguridad?

¿Estás usando s3 para almacenar tus cargas? Si no es así, ¿podrías entrar en el contenedor e ir a /shared/uploads/default/original/1X? ¿Tienes archivos allí?

1 me gusta

Sí, no uso S3 y siempre incluía imágenes adjuntas en la copia de seguridad…

¿Cómo puedo restablecer las imágenes de las insignias?

Por defecto, no hay forma de “restablecer las imágenes de las insignias” que yo sepa.

Lo primero que haría sería comprobar que las insignias a las que les faltan imágenes se restauraron correctamente. Si consultas la tabla badges, puedes obtener el ID de la imagen en el campo image_upload. Luego, usa ese ID en la tabla uploads para obtener la URL de la imagen, así:

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

La URL se parece a esto: /uploads/default/original/1X/c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg y desde ahí, puedes extraer el nombre del archivo, en este caso sería c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

Luego puedes comprobar en el servidor que la imagen está ahí con find o cualquier método que prefieras

cd /
find . -name c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

Una vez que te hayas asegurado de que las imágenes se restauraron, en la ruta correcta, entonces podrás continuar depurando, ya que el problema está en otro lugar.

¿La versión de Discourse de la copia de seguridad es demasiado diferente de la versión de Discourse en la que estás restaurando?

Quizás alguien más en la comunidad sepa más sobre esto.

1 me gusta

Perfecto, pero ¿cómo puedo saber la URL o el nombre de la insignia que falta?

No encuentro cómo saber la URL o el nombre de la imagen de la insignia que falta.

Sigue las instrucciones aquí Discourse Data Explorer para instalar el plugin Data Explorer, puedes usarlo para inspeccionar la tabla de insignias. Enfócate en tus insignias personalizadas.

1 me gusta

Lo instalé; pero no encontré la tabla de insignias;

este es el error que obtengo al abrir el perfil del administrador;

Mensaje

NoMethodError (método no definido `url' para 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/middleware/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'

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'

Entorno

HTTP HOSTS: site.com

Hola @f1r4s
Me encontré con el mismo problema. ¿Lograste resolver este problema?

Creo que esto se resolvió en este tema:

1 me gusta