@pnoeric, puisque vous êtes préoccupé par la disponibilité du site, je voulais vous transmettre ce que j’ai appris jusqu’à présent.
J’ai effectué ma migration en direct, comme je l’ai mentionné. Si je ne limite pas le débit de la migration, les files d’attente qui gèrent des tâches comme notifier les utilisateurs de l’activité des autres se saturent, ce qui dégrade l’expérience utilisateur du site.
J’ai migré environ 500 publications avec des vidéos et environ 30 000 publications avec des images, ce qui a pris environ deux semaines pour être terminé.
Si vous souhaitez essayer le code que j’ai utilisé, il se trouve actuellement à l’adresse suivante :
Vous pouvez le télécharger et le copier dans votre application pour remplacer le contenu actuel de lib/tasks/uploads.rake.
Avec ce code, vous pouvez faire quelque chose comme ceci :
bin/rake uploads:batch_migrate_from_s3[100,1000]
Cela ne prendra en compte que 1 000 publications au total contenant des fichiers joints, et migrera les fichiers d’un maximum de 100 publications avant de s’arrêter ; chaque fois qu’il modifie effectivement une publication après avoir migré ses fichiers joints, il attendra que la file d’attente soit vide avant de démarrer la suivante.
Si vous copiez le fichier, cela cassera les futures mises à jour du site jusqu’à ce que vous annuliez le changement. Le moyen le plus simple de l’annuler une fois satisfait est simplement ./launcher rebuild app (bien que, en tant que développeur, j’utilise git checkout HEAD lib/tasks/uploads.rake pour annuler mes modifications…).
J’ai remarqué qu’au moins avec Digital Ocean Spaces, je dois parfois réessayer plusieurs fois avant qu’une migration ne réussisse. Le script tel qu’il est actuellement ne vous donne aucun avertissement lorsque cela se produit, et vous devez simplement continuer à l’exécuter et attendre de voir. J’ai une PR en attente de révision qui affiche les erreurs dans ce cas, afin que vous sachiez au moins qu’un problème s’est produit.
…
J’ai ajouté une simple boucle de réessai courte, ainsi que le message d’erreur, et il semble que la boucle de réessai résolve le problème. De plus, la validation par rapport aux règles actuelles était effectuée sur le contenu brut des publications passées, ce qui pouvait casser la migration et laisser silencieusement des publications nécessitant une nouvelle cuisson ; j’ai également corrigé cela. Vous ne voudrez absolument pas effectuer une migration sans obtenir au moins la correction de validation, qui fait partie des commits de ma PR actuellement en cours de révision.
…
J’ai terminé ma migration, à ma connaissance. Ma PR contient tout le code que j’ai utilisé pour achever ma migration. Elle n’a pas encore été révisée. Je vous suggère de suivre l’évolution sur Migrate_from_s3 problems si vous le souhaitez.