pfaffman
(Jay Pfaffman)
26 Octubre, 2021 14:35
1
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?
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
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
IAmGav
(Gavin Perch)
26 Octubre, 2021 14:41
2
En Sidekiq hay un disparador para crear avatares faltantes.
Tarda un tiempo, pero eso debería ayudar si no me equivoco.
2 Me gusta
pfaffman
(Jay Pfaffman)
26 Octubre, 2021 14:49
3
¡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
pfaffman
(Jay Pfaffman)
27 Octubre, 2021 12:30
4
Aquí tienes una pista:
ActionController::RoutingError (No hay una ruta que coincida con [GET] "/user_avatar/community.example.com/broken_user")
1 me gusta
IAmGav
(Gavin Perch)
27 Octubre, 2021 12:51
5
¿Se actualiza cuando el usuario inicia sesión en su cuenta?
pfaffman
(Jay Pfaffman)
27 Octubre, 2021 12:54
6
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.
IAmGav
(Gavin Perch)
27 Octubre, 2021 12:56
7
hay una force_avatar_update en el inicio de sesión del usuario que vi en el código.
IAmGav
(Gavin Perch)
27 Octubre, 2021 13:01
8
esto podría ser muy útil, parece un trabajo
# 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)
27 Octubre, 2021 18:25
9
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
pfaffman
(Jay Pfaffman)
10 Noviembre, 2021 20:00
10
Creo que este es un error legítimo y Jeff 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