Rake uploads:migrate_from_s3 falha

@pnoeric, já que você está preocupado com o tempo de atividade do site, achei que deveria compartilhar com você o que aprendi até agora.

Fiz minha migração ao vivo, como mencionei. Se eu não limitar a taxa da migração, as filas que realizam tarefas como notificar usuários sobre a atividade uns dos outros ficam congestionadas e a experiência do usuário no site é prejudicada.

Migrei cerca de 500 posts com vídeos e aproximadamente 30 mil posts com imagens, o que levou cerca de duas semanas para ser concluído.

Se quiser testar o código que usei, ele está atualmente em:

Você pode baixá-lo e copiá-lo para o seu aplicativo, substituindo o conteúdo atual de lib/tasks/uploads.rake.

Com esse código, você pode fazer algo como:

bin/rake uploads:batch_migrate_from_s3[100,1000]

Isso considerará apenas 1000 posts com uploads no total e migrará arquivos de no máximo 100 posts antes de parar; sempre que o script modificar realmente um post após migrar seus uploads, ele aguardará até que a fila esteja vazia antes de iniciar o próximo.

Se você copiar o arquivo, quebrará futuras atualizações do site até que a alteração seja revertida. A maneira mais fácil de desfazer isso, depois de satisfeito, é simplesmente executar ./launcher rebuild app (embora, como desenvolvedor, eu use git checkout HEAD lib/tasks/uploads.rake para reverter minhas alterações…).

Notei que, pelo menos com os espaços do Digital Ocean, às vezes preciso tentar algumas vezes antes que a migração seja bem-sucedida. O script, como está atualmente, não avisa quando isso acontece, e você precisa apenas continuar executando-o e aguardando para ver. Tenho um PR aguardando revisão que imprime os erros nesses casos, para que você pelo menos saiba que algo deu errado.

Adicionei um simples loop de repetição curto, bem como a mensagem de erro, e parece que o loop de repetição resolve o problema. Além disso, a validação contra as regras atuais estava sendo feita no conteúdo bruto de posts antigos, o que poderia quebrar a migração e deixar silenciosamente posts que precisavam ser reprocessados; isso também foi corrigido. Você definitivamente não deve fazer uma migração sem obter pelo menos a correção de validação, que é um dos commits do meu PR atualmente em revisão.

Concluí minha migração, até onde sei. Meu PR contém todo o código que usei para completar a migração. Ele ainda não foi revisado. Sugiro acompanhar em Migrate_from_s3 problems se desejar.