No se pueden generar avatares de usuario al migrar a un nuevo servidor porque la extensión es "unknown"

EDIT: Estoy reclasificando esto como un error, para que alguien que lo entienda mejor que yo pueda echarle un vistazo.

Varias subidas tenían “unknown” como extensión. Esto significa que es imposible generar miniaturas. Creo que esto ocurrió al mover una copia de seguridad a un nuevo sitio y luego necesitar regenerar las miniaturas.

Creo que lo que debería suceder cuando intentas generar miniaturas y la extensión es ‘unknown’ es reemplazar la extensión, algo como:

 upload.extension = upload.original_filename.split('.').last

Parece que si esto se hiciera en algún lugar, no habría pasado 4 horas con esto.

Espera. Esto parece ser el problema. ¿Por qué devolver false en lugar de obtener la extensión del nombre del archivo?

A continuación, los detalles crudos.

Migré un sitio de /community a community.example.com realizando una copia de seguridad y restauración. Arreglé las subidas con:

 RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'

Pero los avatares siguen siendo el Hombre Gris.

Cuando miro user.user_avatar.custom_upload.url y pego esa URL en el navegador, obtengo el avatar deseado. Parece que necesito “rehornar” a los usuarios.

Pensé que quizás un

rake avatars:refresh

o

rake avatars:clean

podría solucionarlo, pero sin éxito.

¿Qué me estoy perdiendo?

1 me gusta

En Sidekiq hay un disparador para crear avatares faltantes.

Tarda un tiempo, pero eso debería ayudar si no me equivoco.

2 Me gusta

¡Buena! Esa llamada ejecuta User.refresh_avatar, pero lamentablemente

  user=User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

tampoco está resolviendo esto.

2 Me gusta

Aquí tienes una pista:

ActionController::RoutingError (No hay una ruta que coincida con [GET] "/user_avatar/community.example.com/broken_user")
1 me gusta

¿Se actualiza cuando el usuario inicia sesión en su cuenta?

No lo creo.

user.user_avatar.custom_upload tiene la URL correcta, pero https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png muestra la imagen de avatar faltante. Necesito encontrar la forma de reconstruir esas miniaturas de avatar.

hay una force_avatar_update en el inicio de sesión del usuario que vi en el código.

esto podría ser muy útil, parece un trabajo

Algo debe estar mal:

user=User.find_by_username('Tuomo')
upload_id=user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
      Discourse.avatar_sizes.each do |size|
        OptimizedImage.create_for(upload, size, size)
      end
OptimizedImage.where(upload_id: upload_id)

Y obtengo que no hay imágenes optimizadas.

broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
  upload.extension = upload.original_filename.split('.').last
  upload.save
end

Arregla eso.

Luego solo necesito generar nuevas miniaturas, así:

has_upload = UserAvatar.where("custom_upload_id > 0")

has_upload.each do |user_avatar|
  Jobs.enqueue(:create_avatar_thumbnails,{upload_id: user_avatar.custom_upload_id})
end
2 Me gusta

Creo que este es un error legítimo y Jeff :heart:ed, pero no ha recibido más atención.

¿Estoy loco o algo está roto aquí?

2 Me gusta

Moví un sitio de /community a community.example.com haciendo una copia de seguridad y restauración.

Supongo que simplemente no nos hemos encontrado con esto en ninguna de nuestras restauraciones, porque lo que te quejas aquí son artefactos de restauración, ¿verdad? ¿Quizás específicos de esta copia de seguridad y restauración?

1 me gusta