Migrate_to_s3 falha por causa das imagens do logo

Estou movendo um site existente de armazenar uploads localmente para armazená-los no S3, seguindo este guia. Tudo está funcionando bem para novos uploads, confirmei que eles estão aparecendo no S3 verificando manualmente. No entanto, quando tento executar rake uploads:migrate_to_s3, recebo a seguinte saída:

Por favor, note que a migração para S3 atualmente não pode ser revertida!
[CTRL+c] para cancelar, [ENTER] para continuar

Migrando uploads para S3 para 'default'...
Alguns uploads não foram migrados para o novo esquema. Executando a migração, isso pode levar algum tempo...
rake abortou!
FileStore::ToS3MigrationError: Alguns uploads não puderam ser migrados para o novo esquema. Você precisa corrigir isso 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>'
Tarefas: TOP => uploads:migrate_to_s3
(Veja o rastreamento completo executando a tarefa com --trace)

Olhando no arquivo onde o erro se origina, lib/file_store/to_s3_migration.rb, vejo que ele parece estar executando uma verificação na tabela uploads para linhas onde url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'. No meu caso, assumo que seeded_image_url se resolve para uploads/default/original/_X/.

Executei a mesma verificação no banco de dados manualmente e encontrei o seguinte:


Não me preocupo com os dois de baixo, imagino que sejam apenas artefatos acidentais da troca - se eles não tiverem url, presumivelmente o site não sabe onde encontrá-los, então eles podem ser removidos com segurança. Estou mais preocupado com os logos, no entanto. Estes são os logos padrão, que na verdade ainda estamos usando, mas eles são distribuídos com o código-fonte em vez de serem carregados.

É seguro adicionar uma terceira condição em to_s3_migration.rb, linha 146, que também ignora uploads onde a coluna URL começa com /images/? Ou devo apenas excluir essas linhas porque esses arquivos são tratados separadamente dos uploads agora, e isso é apenas um artefato de uma versão mais antiga do Discourse? Ou eu entendi mal o que a tarefa está fazendo (não sou muito familiarizado com Rails) e o problema é outra coisa?

1 curtida

Voltei no dia seguinte e tentei novamente, e a tarefa de migração funcionou bem. Acho que as imagens de logotipo nunca foram o problema, e foram apenas aquelas duas extras. Presumivelmente, elas foram limpas por algum tipo de tarefa periódica, porque quando olho agora, elas sumiram.

Em retrospectiva, a tarefa de upload verifica URLs de upload ruins com:

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

Presumivelmente, é o by_users que faz com que ele ignore as imagens de logotipo, já que elas não têm um user_id válido.

3 curtidas