Não é possível gerar avatares de usuário ao migrar para um novo servidor porque a extensão está "desconhecida"

EDIT: Estou reclassificando isso como um bug, para que alguém que entenda melhor o assunto possa analisar.

Vários uploads tinham a extensão “unknown”. Isso significa que é impossível gerar miniaturas. Acredito que isso ocorreu ao mover um backup para um novo site e, em seguida, precisar regenerar as miniaturas.

Acho que o que deveria acontecer ao tentar gerar miniaturas quando a extensão é ‘unknown’ é substituir a extensão, algo como:

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

Parece que, se isso fosse feito em algum lugar, eu não teria gasto 4 horas com isso.

Espere. Isso parece ser o problema. Por que retornar false em vez de obter a extensão a partir do nome do arquivo?

Os detalhes mais detalhados seguem abaixo.

Movi um site de /community para community.example.com fazendo um backup e restauração. Corrigi os uploads com:

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

Mas os avatares ainda são o “Homem Cinza”.

Quando olho para user.user_avatar.custom_upload.url e coloco essa URL no navegador, obtenho o avatar desejado. Parece que preciso “refazer” os usuários.

Pensei que talvez um

rake avatars:refresh

ou

rake avatars:clean

pudesse corrigir, mas não funcionou.

O que estou esquecendo?

1 curtida

No Sidekiq, existe um gatilho para criar avatares ausentes.

Demora um pouco, mas isso deve ajudar, se não me engano.

2 curtidas

Bom trabalho! Isso chama User.refresh_avatar, mas, infelizmente,

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

também não resolve isso.

2 curtidas

Aqui está uma dica:

ActionController::RoutingError (Nenhuma rota corresponde a [GET] "/user_avatar/community.example.com/broken_user")
1 curtida

Ele atualiza quando o usuário faz login na conta dele?

Não acredito que seja isso.

user.user_avatar.custom_upload possui a URL correta, mas https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png apresenta a imagem de avatar ausente. Preciso descobrir como recriar essas miniaturas de avatar.

há um force_avatar_update no login do usuário que eu vi no código.

isso pode ser muito útil, parece que é isso que precisamos

Algo deve estar errado:

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)

E eu recebo que não há imagens otimizadas.

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

corrige isso.

Então, eu só preciso gerar novas miniaturas, assim:


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 curtidas

Acho que este é um bug legítimo e o Jeff :heart:ou, mas ele não recebeu mais atenção.

Estou louco ou algo está quebrado aqui?

2 curtidas

Movi um site de /community para community.example.com fazendo backup e restauração

Acho que simplesmente não encontramos isso em nenhuma de nossas restaurações, porque o que você está reclamando aqui são artefatos de restauração, sim? Talvez específicos deste backup e restauração?

1 curtida