Migrate_to_s3 falla debido a las imágenes del logo

Estoy moviendo un sitio existente de almacenar cargas localmente a almacenarlas en S3, siguiendo esta guía. Todo funciona bien para las nuevas cargas, he confirmado que aparecen en S3 revisando manualmente. Sin embargo, cuando intento ejecutar rake uploads:migrate_to_s3 obtengo la siguiente salida:

¡Tenga en cuenta que la migración a S3 actualmente no se puede revertir!
[CTRL+c] para cancelar, [ENTER] para continuar

Migrando cargas a S3 para 'default'...
Algunas cargas no se migraron al nuevo esquema. Ejecutando la migración, esto puede llevar un tiempo...
rake aborted!
FileStore::ToS3MigrationError: Algunas cargas no se pudieron migrar al nuevo esquema. Debe solucionarlo manualmente.
/var/www/discourse/lib/file_store/to_s3_migration.rb:162:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:127:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(Ver traza completa ejecutando la tarea con --trace)

Mirando en el archivo donde se origina el error, lib/file_store/to_s3_migration.rb, veo que parece estar ejecutando una verificación contra la tabla uploads para filas donde url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'. En mi caso, supongo que seeded_image_url se resuelve a uploads/default/original/_X/.

Ejecuté la misma verificación contra la base de datos manualmente y encontré lo siguiente:


Los dos de abajo no me preocupan, supongo que son artefactos accidentales del cambio; si no tienen url, presumiblemente el sitio no sabe dónde encontrarlos, por lo que se pueden eliminar de forma segura. Me preocupan más los logotipos, sin embargo. Estos son los logotipos predeterminados, que todavía estamos usando, pero se distribuyen con la base de código en lugar de cargarse.

¿Es seguro agregar una tercera condición en to_s3_migration.rb, línea 146, que también ignore las cargas donde la columna URL comienza con /images/? ¿O debería simplemente eliminar esas filas porque esos archivos se manejan por separado de las cargas ahora, y eso es solo un artefacto de una versión anterior de Discourse? ¿O he entendido mal lo que está haciendo la tarea (no soy muy familiar con Rails) y el problema es algo más?

1 me gusta

Regresé al día siguiente y lo intenté de nuevo, y la tarea de migración funcionó bien. Supongo que las imágenes del logo nunca fueron el problema, y solo fueron esas dos adicionales. Presumiblemente, esas fueron eliminadas por algún tipo de tarea periódica, porque cuando miro ahora, ya no están.

En retrospectiva, la tarea de carga verifica las URL de carga incorrectas con:

Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'").exists?

Presumiblemente, es by_users lo que hace que ignore las imágenes del logo, ya que esas no tienen un user_id válido.

3 Me gusta