Configuré un nuevo host para tener un entorno de ‘staging’. Recreé la misma instalación de Discourse con lo que debería ser la misma versión. Estoy ejecutando la versión: 2.8.2.
Primer comentario, a partir de la versión 2.8.2, el tamaño de mi copia de seguridad ha disminuido de 282 MB a alrededor de 90 MB. No estoy seguro de por qué, pero lo aceptaré con la inteligencia añadida de que me estoy aprovechando.
Descargué el último archivo de mi foro y lo subí al almacenamiento local en el nuevo entorno de staging.
La restauración falla debido a:
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] Migrando la base de datos...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] Reconectando a la base de datos...
[2022-02-27 19:43:00] Recargando la configuración del sitio...
[2022-02-27 19:43:00] Desactivando correos electrónicos salientes para usuarios que no son del personal...
[2022-02-27 19:43:02] Desactivando el modo de solo lectura...
[2022-02-27 19:43:02] Limpiando la caché de categorías...
[2022-02-27 19:43:02] Recargando traducciones...
[2022-02-27 19:43:02] Remapeando subidas...
[2022-02-27 19:43:02] Remapeando 'https://forum.geekbeacon.org' a 'https://forum-staging.geekbeacon.org'
[2022-02-27 19:43:08] Restaurando subidas, esto puede tardar un poco...
[2022-02-27 19:43:36] EXCEPCIÓN: 8 publicaciones no se han reasignado a la nueva URL de carga de S3. La migración de S3 falló para la base de datos 'default'.
[2022-02-27 19:43:36] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:317:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:62:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:44:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:23:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:36:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2022-02-27 19:43:36] Intentando revertir...
[2022-02-27 19:43:36] Revertiendo...
[2022-02-27 19:43:36] Limpiando...
[2022-02-27 19:43:36] Eliminando funciones del esquema discourse_functions...
[2022-02-27 19:43:36] Eliminando el directorio temporal '/var/www/discourse/tmp/restores/default/2022-02-27-194051'...
[2022-02-27 19:43:36] Reanudando sidekiq...
[2022-02-27 19:43:36] Marcando la restauración como finalizada...
[2022-02-27 19:43:36] Notificando a 'csgeek' el fin de la restauración...
Este es tu problema. ¿Quizás usar el mismo bucket de S3 y usar el mismo bucket? Quizás asegúrate de que la configuración oculta que se llama algo como “descargar S3 en copia de seguridad” esté activada. Necesitarás buscar o mirar en el código fuente el nombre de la configuración.
O quizás necesites asegurarte de que el resto de tus subidas en el sitio de producción estén en S3.
No tengo S3 configurado. Supongo que el servidor antiguo tiene datos antiguos que no se asignaron a una ubicación S3 válida.
Volví al servidor anterior y tengo 2 buckets configurados, 1 para copias de seguridad y 1 para medios. Seguí la guía y configuré AWS S3, incluido el CDN.
Cuando ejecuto rake uploads:migrate_to_s3, que falló, lo seguí con posts:rebake y eso parece haber reducido el número de errores, pero todavía falla:
Tenga en cuenta que la migración a S3 no se puede revertir actualmente.
[CTRL+c] para cancelar, [ENTER] para continuar
Migrando cargas a S3 para 'default'...
Subiendo archivos a S3...
- Listando archivos locales
=> 208 archivos
- Listando archivos de S3
. => 978 archivos
- Sincronizando archivos a S3
................................................................................................................................................................................................................
Actualizando las URL en la base de datos...
Eliminando imágenes optimizadas antiguas...
Marcando todas las publicaciones que contienen lightboxes para rebake...
Se marcaron 15 publicaciones para un rebake
rake abortó!
FileStore::ToS3MigrationError: 1 publicación no se reasigna a la nueva URL de carga de S3. La migración a S3 falló para la base de datos 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tareas: TOP => uploads:migrate_to_s3
(Ver rastreo completo ejecutando la tarea con --trace)
¿Hay alguna forma de ejecutar migrate_to_s3 en modo detallado para identificar la publicación que es la culpable?
¿Su restauración está fallando con un error como este?
FileStore::ToS3MigrationError: 1 publicaciones no se han reasignado a la nueva URL de carga de S3. La migración de S3 falló para la base de datos 'default'.
En ese caso, lo mejor que se puede hacer es arreglar la(s) publicación(es) que tienen cargas en el lugar equivocado. Pero creo que hay un caso en el que esa prueba puede tener un falso positivo. En ese caso, puede usar un interruptor en la tarea rake que hará que se detenga para que pueda arreglar las cosas. No lo encuentro rápidamente, y no está en Backup discourse from the command line donde debería estar. Estoy en medio de una tarea, así que no puedo encontrarlo ahora.
Eso pausará la restauración y podrás modificar la base de datos en otra terminal para arreglarla. O, creo, simplemente puedes detenerla antes de que haga esa comprobación.
Sincronizando archivos a S3
..
Actualizando las URLs en la base de datos…
Eliminando imágenes optimizadas antiguas…
Marcando todas las publicaciones que contienen lightboxes para rehacer el horneado (rebake)…
169809 publicaciones fueron marcadas para un rehacer el horneado EXCEPCIÓN: 3 publicaciones no se han reasignado a la nueva URL de subida de S3. La migración a S3 falló para la base de datos ‘default’.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in raise_or_log' /var/www/discourse/lib/file_store/to_s3_migration.rb:81:in migration_successful?’
/var/www/discourse/lib/file_store/to_s3_migration.rb:385:in migrate_to_s3' /var/www/discourse/lib/file_store/to_s3_migration.rb:59:in migrate’
/var/www/discourse/lib/file_store/s3_store.rb:367:in copy_from' /var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in restore_uploads’
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in restore' /var/www/discourse/lib/backup_restore/restorer.rb:179:in restore_uploads’
/var/www/discourse/lib/backup_restore/restorer.rb:72:in run' script/discourse:243:in restore’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in run' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in dispatch' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/base.rb:584:in start’
script/discourse:397:in \u003ctop (required)\u003e’ /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in load’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in kernel_load' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in run’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in exec' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in run’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in invoke_command' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in dispatch’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in dispatch' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in start’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in start' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in block in \u003ctop (required)\u003e’
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in with_friendly_errors' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in \u003ctop (required)\u003e’
/usr/local/bin/bundle:25:in load' /usr/local/bin/bundle:25:in ’
Intentando revertir…
Revertiendo…
Limpiando cosas…
Eliminando funciones del esquema discourse_functions…
Eliminando el directorio temporal ‘/var/www/discourse/tmp/restores/default/2026-01-13-145033’…
Reactivando sidekiq…
Marcando la restauración como finalizada…
Notificando a ‘system’ sobre el final de la restauración…
¡Terminado!
Yo miraría el código que realiza esa prueba y luego ejecutaría la misma consulta. Puede que haya publicado el código para hacer eso antes.
Publiqué
¿Hiciste eso? Creo que podrías simplemente presionar control-c después de que termine la restauración. ¿Estás haciendo una restauración solo de la base de datos?
Oh, vaya, no había pensado en detener la restauración después de la base de datos y antes de las subidas.
No necesito mover las subidas de S3, ¿puedo simplemente migrar el frontend y la base de datos?
¿Puedes decirme qué opción te permite detener el rake en las publicaciones e identificar las problemáticas? Te lo agradecería mucho.