Rake uploads:migrate_from_s3 falla

@pnoeric, dado que te preocupa el tiempo de actividad del sitio, pensé en compartir contigo lo que he aprendido hasta ahora.

Realicé la migración en vivo, como mencioné. Si no aplico límites de velocidad a la migración, las colas que realizan tareas como notificar a los usuarios sobre la actividad de otros se saturan y la experiencia del usuario en el sitio se ve afectada.

Migré alrededor de 500 publicaciones con videos y aproximadamente 30.000 publicaciones con imágenes, lo que tomó unas dos semanas en completarse.

Si deseas probar el código que utilicé, actualmente está disponible en:

Puedes descargarlo y copiarlo en tu aplicación para reemplazar el contenido actual de lib/tasks/uploads.rake.

Con este código, puedes hacer algo como esto:

bin/rake uploads:batch_migrate_from_s3[100,1000]

Esto considerará solo 1000 publicaciones con archivos adjuntos en total y migrará archivos de un máximo de 100 antes de detenerse; cada vez que realmente modifique una publicación después de migrar sus archivos adjuntos, esperará a que la cola esté vacía antes de iniciar la siguiente.

Si copias el archivo, romperás las futuras actualizaciones del sitio hasta que deshagas el cambio. La forma más sencilla de deshacerlo una vez que estés satisfecho es simplemente ./launcher rebuild app (aunque como desarrollador, utilizo git checkout HEAD lib/tasks/uploads.rake para deshacer mis cambios…).

He notado que, al menos con los espacios de Digital Ocean, a veces tengo que reintentar varias veces antes de que una migración tenga éxito. El script tal como está actualmente no te avisa cuando eso sucede, y solo tienes que seguir ejecutándolo y esperar a ver. Tengo una solicitud de extracción (PR) pendiente de revisión que imprime errores en ese caso, para que al menos sepas que algo salió mal.

He añadido un sencillo bucle de reintento corto, así como el mensaje de error, y parece que el bucle de reintento resuelve el problema. Además, se estaba realizando la validación contra las reglas actuales sobre el contenido en bruto de publicaciones pasadas, lo que podía romper la migración y dejar silenciosamente publicaciones que necesitaban ser reprocesadas; también he solucionado eso. Definitivamente no querrás realizar una migración sin obtener al menos la corrección de validación, que es uno de los commits de mi PR actualmente en revisión.

He terminado mi migración, hasta donde sé. Mi PR contiene todo el código que utilicé para completar mi migración. Aún no ha sido revisado. Te sugiero seguir el hilo en Migrate_from_s3 problems si lo deseas.