Rake uploads:migrate_from_s3 falla

Sí, pero lo anulaste en tu punto #2, por lo que al hacerlo vuelves a guardar archivos en S3.

2 Me gusta

La configuración del archivo app.yml se utiliza únicamente al reconstruir el contenedor y sirve para rellenar el archivo config/discourse.conf en el contenedor que se está construyendo.

1 me gusta

¡Ajá! ¿Entonces, si tengo alguna variable s3_ en mi archivo conf/discourse.conf, Discourse piensa que las cargas a S3 están habilitadas? Ok… entendido… lo quitaré y lo intentaré de nuevo.

Probablemente solo hay uno que importa… No estoy en mi computadora para verificar qué podría provocar que eso se active, pero si esa verificación se activa, esperaría que tu sitio esté subiendo todas las nuevas cargas a S3.

1 me gusta

¡Funciona, funciona, funciona, funciona y funciona! ¡Yay!!! Muchas gracias por todo tu trabajo y por explicarme con paciencia lo que tenía que hacer. Es genial poner esto en marcha.

Así que tengo unas cuantas preguntas rápidas para entender mejor qué está pasando…

He estado ejecutando lotes de 100 a la vez. En los primeros ciclos, la herramienta estaba migrando publicaciones (?), pero ahora solo está copiando imágenes. Tengo miles y miles de publicaciones y cada una suele tener solo una imagen adjunta… así que no sé por qué ni cómo se “quedó sin” publicaciones para migrar. ¿Qué significa migrar una publicación? Esa es la pregunta 1: ¿qué está ocurriendo exactamente? :wink:

La pregunta 2 es más sencilla. Ahora, al ejecutarlo, solo copia imágenes, pero noto que las imágenes 2X se están copiando en 3X localmente:

Descargado 27/100: //my-forum-storage.s3.dualstack.us-east-1.amazonaws.com/original/2X/1/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg a /uploads/default/original/3X/1/4/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg

Fíjate que la URL cambia de 2X/1/xyz.jpeg a 3X/1/4/xyz.jpeg (hay una ruta de carpeta extra).

¿Todo eso está bien?

Por último, he estado revisando algunas imágenes al azar y parecen estar bien, pero como no tengo ni idea de qué publicación está asociada a cada imagen, no puedo hacer una comprobación “en vivo” en el foro y estar 100% seguro de que mis usuarios ven lo correcto. ¿Cómo puedo mapear el nombre del archivo jpeg a una publicación del foro?

1 me gusta

¿Qué comandos estabas escribiendo exactamente? Necesitarás ampliar el límite para cubrir todas tus publicaciones.

Así que al final especificé un límite grande una vez que estuve seguro de que pasaría a la siguiente fase, algo así:

bin/rake uploads:batch_migrate_from_s3[100,100000]

Esto migra primero las subidas que encuentra en las publicaciones; no hay integridad referencial entre las referencias de post.raw a una subida y el objeto de subida en la base de datos. Busca publicaciones con cualquier referencia a URLs simples o URLs del pseudo-protocolo upload:// que representan contenido remoto, donde necesita al menos volver a procesar la publicación después de la migración, si no guardar una modificación como para las URLs base que apuntan directamente a S3. Cuando no encuentra ningún contenido en una publicación que necesite ser migrado, pasa al siguiente elemento.

Los cambios de ruta no son algo impulsado directamente por el script de migración, son simplemente cambios en la ubicación donde Discourse guarda los archivos. Un nivel más de directorio ayuda con el rendimiento cuando tienes muchos archivos, y muchos otros sistemas usan dos y ocasionalmente tres niveles de directorios para distribuir los archivos.

Puedes encontrarte con el mismo problema que yo: al migrar las otras subidas, Discourse perdió el rastro de las imágenes de perfil de los usuarios. No me di cuenta hasta que fue demasiado tarde para restaurar desde una copia de seguridad, así que simplemente envié mensajes a los usuarios afectados, me disculpé y les pedí que arreglaran sus avatares. Todavía no sé qué salió mal allí.

Ah, vale, genial. Veo esto en la salida del progreso:

Todas las cargas de publicaciones migradas. Migrando cargas de perfil...
Todas las cargas de perfil migradas. Migrando otras cargas que no son de publicaciones...

¿Qué son las “cargas que no son de publicaciones”? Parece que es donde queda todo el trabajo: migrar publicaciones y cargas de perfil no hace nada.

¡Gracias por la tranquilidad sobre las rutas de las cargas originales!

No estoy seguro de si eso está ocurriendo o no, pero no importa: mi sitio usa SSO, así que paso la URL del avatar cada vez que el usuario inicia sesión (o cambia su imagen en el sitio principal).

Honestamente, no sé qué eran el resto. Más bien esperaba que, si la integridad referencial fuera una preocupación, hubiera una restricción de clave foránea, y que, de lo contrario, simplemente se buscara la carga y se utilizara donde fuera. Ciertamente, me encontré con restricciones de clave foránea como indicador de que era necesario hacer algo especial para dos cargas adjuntas a perfiles de usuario.

1 me gusta

Hmm, parece que sí está funcionando… aunque esta mañana me encontré con un problema grave… de repente el uso del disco se disparó un 25% y llenó la unidad, haciendo que los foros se bloquearan por completo.

Ahora mismo, cuando ejecuto la tarea rake, parece que está descargando/subiendo las imágenes justo durante la ejecución por lotes. Escribo el comando rake, procesa exactamente 300 imágenes (las ejecuto en lotes de 300) y luego termina.

Así que la pregunta importante es: ¿se podría poner en cola simplemente la descarga de esas imágenes desde S3 al disco local? ¿Podría haberse acumulado algún tipo de lote que luego se ejecutó a las 5 a.m. y dejó fuera de servicio mis foros? :frowning:

Hice que esperara a que la cola se despejara antes de realizar cada nueva publicación durante la migración de publicaciones, cada nuevo lote de cargas de perfiles y luego cada otra carga. Debería estar procesando todas tus imágenes justo después de que se muevan. (La versión estándar simplemente las acumula y satura la cola hasta que termina; en mi caso, eso habría significado de 10 a 12 días sin enviar ninguna notificación del foro mientras volvía a procesar las imágenes.)

No se me ocurre qué podría haber causado un pico así, a menos que se hubiera encontrado con muchas cargas muy grandes.

1 me gusta

Sí, para mí es un misterio. Digo, ni siquiera ejecuto los lotes con tanta frecuencia; ingreso el comando manualmente cada vez y lo observo mientras se ejecuta. No tengo más publicaciones ni perfiles que migrar; todo lo que queda son «otros archivos subidos». Cuando ejecuto el lote, parece que descarga de S3 y vuelve a subir a Digital Ocean al instante. (Y no veo nada en Sidekiq que indique que algo esté en cola.)

Estoy tratando de encontrar otros registros que puedan indicar qué ocurrió a las 5:35 a. m.

Lee todo el tema.

Pero la mayor parte me pareció confusa. Aunque estoy muy familiarizado con los comandos de Docker/contenedores y los comandos básicos de Rails.

Estoy teniendo problemas similares (muchos de mis posts tienen imágenes faltantes, o algunas no muestran imágenes hasta que haces clic en ellas).

Usé dos buckets de S3 diferentes en dos momentos distintos del año. Tengo alrededor de 1000 posts y aproximadamente tantas imágenes.

Ahora he copiado todas las imágenes de los buckets de S3 a mi servidor local. ¿Alguien puede decirme cómo remapear las URLs de Discourse para que esas imágenes ahora se conecten correctamente a los posts?