Avatares faltantes después de la importación

Tengo una importación de vBulletin para un cliente alojado. Los avatares han desaparecido y ahora se muestran como una figura genérica de persona en blanco, como esta.

Estoy bastante seguro de que en algún momento estaban presentes. Las URL parecen indicar que deberían tener algo. ¿Existe alguna forma de poder encontrarlos?

Maybe related to that?

1 me gusta

Do you have a backup where you can check the URL?
Are they in the tombstone?

1 me gusta

I did a fresh import and all of the avatars are missing. Sidekiq still has 13M things to process, but I don’t see how that could be the problem. I did another import on another site with what I believe to be the same import script and the avatars are fine there.

pry(main)> User.find_by_username('MysteryManAvatar').uploaded_avatar
=> #<Upload:0x0000558a0d31b478
 id: 97,
 user_id: 114,
 original_filename: "clevername.jpg",
 filesize: 2028,
 width: 90,
 height: 67,
 url: "/uploads/default/original/1X/080817dcf59ddc838054fba9716b62fce9ae3d83.jpg",
 created_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
 updated_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
 sha1: "080817dcf59ddc838054fba9716b62fce9ae3d83",
 origin: nil,
 retain_hours: nil,
 extension: "jpg">

But that file isn’t in uploads (or tombstone).

I looked at Avatars not showing after import and that didn’t seem to be related.

He realizado una restauración de la base de datos desde una copia de seguridad (hubo algunas migraciones de la base de datos desde una versión anterior y backup.sql.gz incluía solo SQL, no las cargas).

Desafortunadamente, los avatares no se muestran en el sitio… (solo aparece el marcador de posición predeterminado).

Parece que están correctamente en la base de datos, la URL es correcta y el archivo PNG existe:

root@og-app:/var/www/discourse# rails c
[1] pry(main)> User.find_by_username('Overgrow').uploaded_avatar
=> #<Upload:0x0000565323a78880
 id: 2936,
 user_id: 1,
 original_filename: "avatar.png",
 filesize: 161585,
 width: nil,
 height: nil,
 url:     "/uploads/default/original/2X/f/fbba12aa89b1bc45676efcfa55affd4b7a76edf1.png",
 created_at: Sat, 03 Sep 2016 10:26:23 UTC +00:00,
 updated_at: Sat, 22 Feb 2020 11:57:35 UTC +00:00,
 sha1: "fbbe22aa89b1bc45676efcfa55affd4b7a76edf1",
 origin: nil,
 retain_hours: nil,
 extension: "unknown",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: nil,
 secure: false,
 access_control_post_id: nil,
 original_sha1: nil>

¿Podrías aconsejarme qué probar a continuación? ¡Gracias de antemano!

Actualización:

Algunos avatares se han regenerado en segundo plano… ¿Puedo acelerar el proceso? ¿O ejecutarlo manualmente?

Según mis observaciones, ¿podría esta parte ser un signo del problema?

extension: "unknown",

Parece que los que se regeneraron ahora tienen este campo rellenado:

extension: "JPG",

De alguna manera, mi base de datos, tras la restauración de la copia de seguridad y la migración de Discourse 1.6 a 2.5, carecía de los valores de ancho, alto y extensión para la tabla Upload (los punteros a archivos eran correctos y los archivos estaban en su lugar).

Terminé creando un script que recorre todos los avatares personalizados cargados, corrige la extensión y las dimensiones, y vuelve a generar todas las OptimizedImages con miniaturas de versión 2, que era lo que me faltaba.

Para quien esté interesado, aquí está:

fix-avatars.rb

require File.expand_path("../../config/environment", __FILE__)

generated_count = 0

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

scope.find_each do |ua|

  upload_id = ua.custom_upload_id

  upload = Upload.find_by(id: upload_id)
  
  unless upload
    puts "\nno se encontró la carga para este avatar de usuario"
    next
  end
  
  # corregir desconocido
  if upload.extension === 'unknown'
    upload.extension = nil 
    upload.save!
    puts "\rupload_id #{upload.id} extensión unknown -> nil"
  end

  if upload.extension.nil?
    puts "\rupload_id #{upload.id} corrigiendo extensión"

    upload.fix_image_extension

    if upload.height == 0 || upload.width == 0
      puts "\rupload_id #{upload.id} corrigiendo dimensiones"
      upload.fix_dimensions!
    end

    # verificar versión optimizada
    correct_optimized = OptimizedImage.where(upload_id: upload_id)
      .where(version: 2)

    if correct_optimized.count < 1
      puts "\rupload_id #{upload.id} no tiene miniaturas de versión 2"

      # destruir optimizados antiguos
      puts "\rupload_id #{upload.id} eliminando avatares"
      optimized = OptimizedImage.where(upload_id: upload_id)

      if optimized
        optimized.destroy_all
      end

      # generar optimizados
      puts "\rupload_id #{upload.id} creando avatares"
      Discourse.avatar_sizes.each {|size| OptimizedImage.create_for(upload, size, size, allow_animation: SiteSetting.allow_animated_avatars)}

      generated_count += 1

      puts "\rGenerados #{generated_count} avatares en total"

    end
  end

end
1 me gusta