El comando rails rebake o la tarea rake no funcionan, pero reconstruir el HTML sí. ¿Por qué?

Así que, aquí estoy:

Después de intentar hacer un post.rebake!(invalidate_broken_images: true) en mis 40000 publicaciones que contienen la cadena [img], funcionó para muchas imágenes… Pero lejos de todas, a pesar de estar alojadas en el mismo servicio de alojamiento de imágenes externo.
Por ejemplo, tengo miles de enlaces de “casimages” que funcionan (que enlazan a imágenes válidas y muestran imágenes en la vista previa del editor al editar), rotos en la versión procesada de las publicaciones, que se mostraron y cargaron correctamente en el servidor gracias a mi script, pero también tengo muchas otras en las que simplemente no funcionó, y no sé por qué.

Post.where('raw LIKE ?', '%[img]%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
end

También tengo enlaces de imágenes de otros alojamientos de imágenes que se cargaron, y algunos en los que no funcionó.
No pude ver ninguna diferencia entre estas publicaciones y los enlaces de imágenes. Todas tenían imágenes que funcionaban, y el hecho de que usaran el mismo alojamiento de imágenes me desconcertó.
Intenté la operación varias veces y los resultados fueron inconsistentes, independientemente de los servicios de alojamiento externos… Algunas imágenes se cargaron, otras no. Parecía aleatorio.
Me recuerda un poco al problema que encontró @Amethi: Some linked images not displaying/show as broken - #8 by Amethi donde solo funcionó en algunas imágenes sin ninguna explicación.


:information_source: Aquí solo hablaré de casimages, aunque mi foro importado utilizaba varios otros alojadores de imágenes.

Así que, pensé que quizás casimages bloqueó temporalmente mi IP si intentaba recuperar demasiadas imágenes de sus servidores. Eso podría explicar tanto el hecho de que no funcionara para todas las imágenes como la aleatoriedad del éxito de la carga de las imágenes desde mi servidor.
Incluso hubo casos en los que la opción Rebuild HTML funcionó -al principio solamente-, las imágenes se mostraban en lugar de mostrar un icono de imagen rota, aunque todavía estaban alojadas en su servicio de alojamiento externo, pero cuando se activó la tarea de Sidekiq “pull external image” se rompieron las imágenes.
Lo mismo al usar scripts de Rails con rebake!(invalidate_broken_images: true)
:weary:

Así que, actualmente estoy probando un enfoque más lento, donde espero 5 segundos entre cada uno de mis comandos de Rails rebake!:

total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
    print "#{i}/#{total}"
    print "\r"
    i +=1
    sleep(5)
end

Veré en ~60 horas si ha mejorado…

Me gustaría entender los fundamentos de mi problema aquí y por qué un rebake “normal” no puede cargar una imagen en el servidor (si no estoy temporalmente bloqueado por casimages).

Tenga en cuenta que esta vez, el certificado del servidor de casimages parece estar bien :smile:

Tampoco entiendo qué hace realmente invalidate_broken_images. No estoy muy familiarizado con el código de Discourse.

Miré el código para ver la ocurrencia de invalidate_broken_images y vi estos archivos:

¿Por qué busca específicamente la cadena <img>? Mis publicaciones provienen de una importación de phpBB y la versión sin procesar solo contiene el bbCode [img], no etiquetas <img>; entonces, ¿cómo podría tener un efecto (y lo tuvo, ver mi mensaje anterior) en mis publicaciones? :thinking:

Tampoco entiendo realmente la diferencia entre estos dos métodos (?):

Parece indicar que rebake establece los argumentos predeterminados en false, y que rebake! establece el argumento predeterminado en true.

¿Cómo se relacionan estos dos (por cierto, conozco el propósito del carácter ! en Ruby), y por qué están en archivos diferentes?

Mi objetivo es solo entender por qué mis imágenes externas a veces se cargan y a veces no, y si puedo encontrar una forma fiable de cargarlas correctamente y automáticamente, incluso si implica cargar una imagen cada hora. :sweat_smile:
He estado casi dos semanas en esto y me está volviendo loco (y a las personas para las que migré su servidor). :woozy_face:

Además, no hay nada en el registro de Discourse, aparte de múltiples Sidekiq está consumiendo demasiada memoria (usando: 592.25M). Tenga en cuenta que estoy trabajando en Ubuntu a través de WSL en Windows 10, pero tengo la intención de usar una solución que funcione (si encuentro una…) en nuestro VPS.

1 me gusta