Estou tentando mover uploads para o S3 em um site relativamente movimentado.
Tudo corre como planejado, exceto quando executo rake uploads:migrate_to_s3, recebo o seguinte erro:
Atualizando os URLs no banco de dados...
Removendo imagens otimizadas antigas...
Marcando todos os posts contendo lightboxes para reprocessamento...
2023 posts foram marcados para reprocessamento
rake abortou!
FileStore::ToS3MigrationError: 1 de 9629 uploads não foram migrados para S3. A migração para S3 falhou para o banco de dados 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:79:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(Veja o rastreamento completo executando a tarefa com --trace)
Esta linha em particular chamou minha atenção: FileStore::ToS3MigrationError: 1 de 9629 uploads não foram migrados para S3. A migração para S3 falhou para o banco de dados 'default'.
Estou assumindo que isso significa que há um arquivo problemático que está fazendo com que toda a tarefa rake falhe? Existe uma maneira de descobrir qual arquivo está causando o problema e talvez removê-lo para que o restante da tarefa seja concluído sem problemas?
Alguma Atualização:
O site parece estar carregando normalmente e, pelo que posso ver, as imagens carregadas estão sendo servidas da CDN.
A cópia local de todos os uploads ainda existe no servidor. Presumo que isso ocorra porque a migração está marcada como falha.
Aqui está uma saída do comando rake uploads:s3_migration_status se isso for útil de alguma forma?
# rake uploads:s3_migration_status
1 de 9630 uploads não foram migrados para S3. A migração para S3 falhou para o banco de dados 'default'.
19 posts não foram remapeados para a nova URL de upload do S3. A migração para S3 falhou para o banco de dados 'default'.
Nenhum post requer re-bake.
O site não está pronto para migração.
Você pode encontrar uma referência a qual arquivo falhou em Admin > Logs > Registros de Erro
Se isso não ajudar, acho que pesquisar no banco de dados por posts com cooked que contenham yourdomain/uploads/ listará os 19 posts mencionados no status da migração. Na pior das hipóteses, você pode examiná-los manualmente e comparar quaisquer uploads com o que está no S3.
Algo como:
rails c
Post.where("cooked like '%discourse.example.com/uploads/%'")
Tentei suas sugestões, infelizmente, não tive sorte em encontrar nada relevante nos logs de erro. Vejo uma entrada como Falha ao otimizar imagem: motivo desconhecido, mas ela não me dá mais informações do que o que diz.
Também tentei sua consulta sugerida, obtenho um monte de posts como resultado, mas ao visitar esses posts, eles contêm um monte de miniaturas de pré-visualizações do onebox. quando tento abrir a imagem em uma nova aba nessas miniaturas, elas parecem estar carregando do CDN.
Eu acho que esperaria ver algo assim para 18 dessas 19 postagens, talvez até todas as 19 se o upload que falhou acontecer em uma postagem com vários uploads.
O que pode ser mais fácil é extrair todos os nomes de arquivo do resultado da consulta (por exemplo, f8a2d9381889b8693db2777acac566bd7b134fa5.png) e procurá-los no S3. Em teoria, exatamente um deve estar faltando. Ignore os derivados, apenas procure aqueles com /originals/ no caminho.
Um pouco tedioso, mas não deve demorar muito se essa consulta selecionou apenas essas 19 postagens.
Se não houver uma solução óbvia para que ele seja carregado com sucesso, qualquer uma das opções 1 ou 3 parece ser uma boa maneira de prosseguir. A opção 2 eu provavelmente deixaria para o Discourse, especificamente a tarefa de limpar uploads órfãos, cujo intervalo é controlado pela configuração clean orphan uploads grace period hours.
Pode ser uma boa ideia pegar o arquivo antes que ele seja excluído, no entanto. Se ele não contiver dados sensíveis, pode ser útil para testar por que ele não pode ser carregado durante a migração.
Algo mais que você pode tentar depois de ter removido o arquivo e concluído a migração (e ter baixado o arquivo com falha) é editar a postagem novamente para recolocar o arquivo. Seria interessante saber se ele falha ao fazer o upload para o S3 inteiramente ou apenas durante a tarefa de migração.
Se você não se importar em perder esses 64 arquivos, o que eu fiz quando essa mesma tarefa do rake continuou falhando para mim foi editá-la e fazer com que ela desse erro apenas se houvesse 100 erros em vez de 1.
Tried with SKIP_FAILED=100 rake uploads:migrate_to_s3
=> 0 arquivos
Listando arquivos S3
… .. => 81070 arquivos
Sincronizando arquivos para S3
Atualizando os URLs no banco de dados…
Removendo imagens otimizadas antigas…
Marcando todos os posts contendo lightboxes para re-bake…
54453 posts foram marcados para re-bake
53 posts não foram remapeados para a nova URL de upload S3. A migração S3 falhou para o banco de dados ‘default’.
Não entendi como colocar o arquivo modificado no meu script do Discourse
Ah, que pena. Há outra sugestão do @Falco de editar a tarefa do rake - mas infelizmente não sei como fazer isso, e não consigo encontrar nenhuma instrução quando pesquiso.