pfaffman
(Jay Pfaffman)
Outubro 26, 2021, 2:35pm
1
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?
end
def has_thumbnail?(width, height)
thumbnail(width, height).present?
end
def create_thumbnail!(width, height, opts = nil)
return unless SiteSetting.create_thumbnails?
opts ||= {}
save(validate: false) if get_optimized_image(width, height, opts)
end
# this method attempts to correct old incorrect extensions
def get_optimized_image(width, height, opts = nil)
opts ||= {}
fix_image_extension if (!extension || extension.length == 0)
opts = opts.merge(raise_on_error: true)
begin
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
IAmGav
(Gavin Perch)
Outubro 26, 2021, 2:41pm
2
No Sidekiq, existe um gatilho para criar avatares ausentes.
Demora um pouco, mas isso deve ajudar, se não me engano.
2 curtidas
pfaffman
(Jay Pfaffman)
Outubro 26, 2021, 2:49pm
3
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
pfaffman
(Jay Pfaffman)
Outubro 27, 2021, 12:30pm
4
Aqui está uma dica:
ActionController::RoutingError (Nenhuma rota corresponde a [GET] "/user_avatar/community.example.com/broken_user")
1 curtida
IAmGav
(Gavin Perch)
Outubro 27, 2021, 12:51pm
5
Ele atualiza quando o usuário faz login na conta dele?
pfaffman
(Jay Pfaffman)
Outubro 27, 2021, 12:54pm
6
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.
IAmGav
(Gavin Perch)
Outubro 27, 2021, 12:56pm
7
há um force_avatar_update no login do usuário que eu vi no código.
IAmGav
(Gavin Perch)
Outubro 27, 2021, 1:01pm
8
isso pode ser muito útil, parece que é isso que precisamos
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Jobs::FixOutOfSyncUserUploadedAvatar do
it 'should fix out of sync user uploaded avatars' do
user_with_custom_upload = Fabricate(:user)
custom_upload1 = Fabricate(:upload, user: user_with_custom_upload)
gravatar_upload1 = Fabricate(:upload, user: user_with_custom_upload)
user_with_custom_upload.update!(uploaded_avatar: custom_upload1)
user_with_custom_upload.user_avatar.update!(
custom_upload: custom_upload1,
gravatar_upload: gravatar_upload1
)
user_out_of_sync = Fabricate(:user)
custom_upload2 = Fabricate(:upload, user: user_out_of_sync)
gravatar_upload2 = Fabricate(:upload, user: user_out_of_sync)
prev_gravatar_upload = Fabricate(:upload, user: user_out_of_sync)
This file has been truncated. show original
pfaffman
(Jay Pfaffman)
Outubro 27, 2021, 6:25pm
9
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
pfaffman
(Jay Pfaffman)
Novembro 10, 2021, 8:00pm
10
Acho que este é um bug legítimo e o Jeff 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