@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.