¿Cómo puedo obtener la información de la versión actual de mi respaldo?

Como se mencionó en el título, mi VPS fue atacado. Intenté obtener la información de la versión actual de discourse ejecutando ./discourse-doctor, pero falló.

Afortunadamente, había descargado una copia de seguridad en mi máquina local.
¿Cómo puedo recuperar la información de la versión actual a partir de esta copia de seguridad?
Gracias.

2 Me gusta

¿Qué problema intentas resolver? Puedes restaurar la copia de seguridad a cualquier versión más reciente.

4 Me gusta

Estoy planeando reinstalar el sistema operativo y luego configurar la versión anterior de Discourse para evitar problemas de compatibilidad con los plugins.

Por cierto, si un VPS ha sido hackeado, ¿todavía es posible hacer una copia de seguridad de Discourse? Solo tengo una copia de seguridad automática de hace unos días.

[cita=“Alienazk, post:3, tema:367077”]
si un VPS ha sido hackeado, ¿sigue siendo posible hacer una copia de seguridad de discourse?
[/cita]

Eso depende del estado en el que lo dejaron. Podrías intentar hacerlo a través de la consola de rails:

cd /var/discourse 
./launcher enter app
discourse backup
cd public/backups/default
scp * user@destination.example.com:

El nombre de archivo de tu respaldo tiene el formato forumname-2025-05-22-151843-v20250521053324.tar.gz

La cadena larga al final es la última migración que se ha ejecutado.

Para saber a qué commit corresponde,

cd /var/www/discourse
git blame db/migrate/20250521053324*

Ahora verás alguna salida y la columna izquierda contiene el hash del commit.
Este es el commit mínimo en el que debería estar tu nuevo foro.

(A veces, el commit pertenece a un plugin, en ese caso usa locate para encontrar el plugin, ingresa en su directorio y haz la misma instrucción git blame)

8 Me gusta

Yo recomendaría simplemente actualizar a lo último. Es lo más fácil y no hay ningún riesgo. Si no funciona, entonces puedes seguir esas excelentes instrucciones para encontrar el commit y restaurar a ese (¿y también vas a restaurar cada uno de los plugins a algún commit en particular?).

1 me gusta

Intenté realizar una copia de seguridad, pero falló. La salida es la siguiente:

# cd /var/discourse/
/var/discourse# ./launcher enter app
detectado arquitecturax86_64.
/var/www/discourse# discourse backup
Iniciando copia de seguridad...
EXCEPCIÓN: BackupRestore::OperationRunningError
/var/www/discourse/lib/backup_restore/backuper.rb:70:en `ensure_no_operation_is_running'
/var/www/discourse/lib/backup_restore/backuper.rb:22:en `run'
script/discourse:84:en `backup'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28:en `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:en `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor.rb:527:en `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/base.rb:584:en `start'
script/discourse:290:en `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:en `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:en `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:en `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:en `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:en `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:en `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:en `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:en `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:en `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:en `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:en `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:en `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:en `<top (required)>'
/usr/local/bin/bundle:25:en `load'
/usr/local/bin/bundle:25:en `<main>'
Eliminando copias de seguridad antiguas...
Limpiando...
Eliminando archivos '.tar' sobrantes...
Marcando la copia como finalizada...
Notificando al 'sistema' sobre el fin de la copia...
¡Finalizado!
[FRACASADO]

¿Significa esto que no podré realizar una copia de seguridad?

Piensa que otra copia de seguridad se está ejecutando. Podrías intentar reiniciar el contenedor y luego intentarlo.

Gracias por tu consejo.
Pude iniciar la copia de seguridad correctamente.
Sin embargo, el proceso se ha detenido en este punto durante unos 20 minutos (ver captura de pantalla a continuación). ¿Es esto normal?

Sí, esta tabla puede crecer mucho debido a un error, véase Clean up user_auth_token_logs?

Si se convierte en un problema, podría detener la copia de seguridad, entrar en la consola de Rails

rails c
UserAuthTokenLog.delete_all

y luego reiniciar la copia de seguridad.

3 Me gusta

Gracias por su sugerencia. He respaldado con éxito los datos más recientes.
Además, dado que el sistema operativo ya ha sido reinstalado, ¿cómo puedo restaurar directamente el estado más reciente usando el archivo app.yml y los archivos de copia de seguridad? ¿Existe alguna documentación oficial para esto? ¿O necesito seguir primero el proceso estándar de instalación de Docker y luego importar la copia de seguridad para restaurar todo?

Por cierto, cuando intenté averiguar a qué commit corresponde mi copia de seguridad de Discourse, obtuve la siguiente salida. ¿Alguna idea de por qué podría ser?

/var/www/discourse# git blame db/migrate/20240516145911*
fatal: no such path 'db/migrate/20240516145911*' in HEAD

¡Esto!

Spoiler: pertenece al plugin de chat.

root@testbeta:/var/www/discourse# locate 202405161459
/var/www/discourse/plugins/chat/db/migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@testbeta:/var/www/discourse# cd plugins/chat/
root@testbeta:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
1 me gusta

¡Muchas gracias!
No estoy muy seguro :pensando: ¿este método genera un commit en el repositorio de Discourse en sí, en lugar del plugin de chat? Si es así, ¿podrías explicar el mecanismo detrás de ello?

¿Parece que podría seguir esta guía?
https://meta.discourse.org/t/restore-a-backup-from-the-command-line/

2 Me gusta

Intenté la forma que recomendaste, pero me encontré con el siguiente problema.
¿Podrías echarle un vistazo y decirme qué pudo haber salido mal?

/var/www/discourse# locate 20240516145911
/shared/backups/default/discourse-2025-05-24-113557-v20240516145911.tar.gz
/var/www/discourse/plugins/chat/db/post_migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@tartali-app:/var/www/discourse# cd plugins/chat/
root@tartali-app:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
fatal: no such path 'plugins/chat/db/migrate/20240516145911*' in HEAD```

Lo siento. Lo obtuve con git blame db/post_migrate/20240516145911*Esta es la salida:

root@tartali-app:/var/www/discourse/plugins/chat# git blame db/post_migrate/20240516145911*
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.42 KiB | 14.20 MiB/s, done.
Resolving deltas: 100% (2/2), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 21.91 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.90 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.82 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.78 KiB | 23.44 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.39 KiB | 22.92 MiB/s, done.Resolviendo deltas: 100% (2/2), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (422/422), hecho.
remoto: Comprimiendo objetos: 100% (421/421), hecho.
remoto: Total 2571 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2149 (de 1)
Recibiendo objetos: 100% (2571/2571), 1008.39 KiB | 22.41 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (404/404), hecho.
remoto: Comprimiendo objetos: 100% (404/404), hecho.
remoto: Total 2571 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2167 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.74 KiB | 21.91 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (422/422), hecho.
remoto: Comprimiendo objetos: 100% (421/421), hecho.
remoto: Total 2571 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2149 (de 1)
Recibiendo objetos: 100% (2571/2571), 1008.40 KiB | 22.92 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (422/422), hecho.
remoto: Comprimiendo objetos: 100% (421/421), hecho.
remoto: Total 2571 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2149 (de 1)
Recibiendo objetos: 100% (2571/2571), 1008.39 KiB | 22.41 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (414/414), hecho.
remoto: Comprimiendo objetos: 100% (414/414), hecho.
Recibiendo objetos: 100% (2571/2571), 1007.78 KiB | 22.90 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Total 2571 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2157 (de 1)
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (403/403), hecho.
remoto: Comprimiendo objetos: 100% (403/403), hecho.
remoto: Total 2571 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2168 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.66 KiB | 22.39 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (413/413), hecho.
remoto: Comprimiendo objetos: 100% (413/413), hecho.
remoto: Total 2571 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2158 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.70 KiB | 12.44 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (412/412), hecho.
remoto: Comprimiendo objetos: 100% (412/412), hecho.
remoto: Total 2571 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2159 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.71 KiB | 22.39 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Enumerando objetos: 2571, hecho.
remoto: Contando objetos: 100% (419/419), hecho.
remoto: Comprimiendo objetos: 100% (418/418), hecho.
remoto: Total 2571 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2152 (de 1)
Recibiendo objetos: 100% (2571/2571), 1008.31 KiB | 21.92 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Enumerando objetos: 2571, hechoremote: Contando objetos: 100% (404/404), listo.
remote: Comprimiendo objetos: 100% (404/404), listo.
remote: Total 2571 (delta 3), reutilizados 0 (delta 0), reempaquetados 2167 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.66 KiB | 22.90 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2571, listo.
remote: Contando objetos: 100% (414/414), listo.
remote: Comprimiendo objetos: 100% (414/414), listo.
remote: Total 2571 (delta 3), reutilizados 0 (delta 0), reempaquetados 2157 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.70 KiB | 12.00 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2571, listo.
remote: Contando objetos: 100% (412/412), listo.
remote: Comprimiendo objetos: 100% (412/412), listo.
remote: Total 2571 (delta 3), reutilizados 0 (delta 0), reempaquetados 2159 (de 1)
Recibiendo objetos: 100% (2571/2571), 1007.70 KiB | 22.39 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (416/416), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
Recibiendo objetos: 100% (2569/2569), 1006.98 KiB | 22.89 MiB/s, listo.
remote: Total 2569 (delta 3), reutilizados 0 (delta 0), reempaquetados 2153 (de 1)
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (418/418), listo.
remote: Comprimiendo objetos: 100% (417/417), listo.
Recibiendo objetos: 100% (2569/2569), 1007.58 KiB | 22.90 MiB/s, listo.
remote: Total 2569 (delta 2), reutilizados 1 (delta 1), reempaquetados 2151 (de 1)
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (405/405), listo.
remote: Comprimiendo objetos: 100% (405/405), listo.
remote: Total 2569 (delta 3), reutilizados 0 (delta 0), reempaquetados 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.90 KiB | 22.88 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (417/417), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 2), reutilizados 1 (delta 1), reempaquetados 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.75 KiB | 20.57 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (417/417), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 2), reutilizados 1 (delta 1), reempaquetados 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.74 KiB | 23.44 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (417/417), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 2), reutilizados 1 (delta 1), reempaquetados 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.55 KiB | 23.43 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (417/417), listo.
remote: Comprimiendo objetos: 100% (416/416), listoremote: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.56 KiB | 23.43 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (418/418), listo.
remote: Comprimiendo objetos: 100% (417/417), listo.
remote: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2151 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.56 KiB | 10.72 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (405/405), listo.
remote: Comprimiendo objetos: 100% (405/405), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.91 KiB | 22.38 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (404/404), listo.
remote: Comprimiendo objetos: 100% (404/404), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.90 KiB | 22.38 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (404/404), listo.
remote: Comprimiendo objetos: 100% (404/404), listo.
Recibiendo objetos: 100% (2569/2569), 1006.88 KiB | 22.88 MiB/s, listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (de 1)
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (416/416), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.89 KiB | 5.47 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (415/415), listo.
remote: Comprimiendo objetos: 100% (415/415), listo.
Recibiendo objetos: 100% (2569/2569), 1006.89 KiB | 22.88 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2154 (de 1)
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (415/415), listo.
remote: Comprimiendo objetos: 100% (415/415), listo.
Recibiendo objetos: 100% (2569/2569), 1006.89 KiB | 21.42 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2154 (de 1)
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (416/416), listo.
remote: Comprimiendo objetos: 100% (415/415), listo.
remote: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.50 KiB | 23.43 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (405/405), listo.
remote: Comprimiendo objetos: 100% (405/405), listo.remoto: Total 2569 (delta 3), reutilizados 0 (delta 0), paquete reutilizado 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 13.98 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (405/405), hecho.
remoto: Comprimiendo objetos: 100% (405/405), hecho.
remoto: Total 2569 (delta 3), reutilizados 0 (delta 0), paquete reutilizado 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 19.36 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (417/417), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 2), reutilizados 1 (delta 1), paquete reutilizado 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.29 KiB | 15.50 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (405/405), hecho.
remoto: Comprimiendo objetos: 100% (405/405), hecho.
remoto: Total 2569 (delta 3), reutilizados 0 (delta 0), paquete reutilizado 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 16.50 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (405/405), hecho.
remoto: Comprimiendo objetos: 100% (405/405), hecho.
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 22.37 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Total 2569 (delta 3), reutilizados 0 (delta 0), paquete reutilizado 2164 (de 1)
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (417/417), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 2), reutilizados 1 (delta 1), paquete reutilizado 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (405/405), hecho.
remoto: Comprimiendo objetos: 100% (405/405), hecho.
remoto: Total 2569 (delta 3), reutilizados 0 (delta 0), paquete reutilizado 2164 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 21.42 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
Recibiendo objetos: 100% (2569/2569), 1006.67 KiB | 20.13 MiB/s, hecho..
Resolviendo deltas: 100% (3/3), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (417/417), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2152 (de 1)
Recibiendo objetos: 100% (2569/2569), 1007.29 KiB | 21.43 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.68 KiB | 21.88 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (415/415), hecho.
remoto: Comprimiendo objetos: 100% (414/414), hecho.
Recibiendo objetos: 100% (2569/2569), 1007.28 KiB | 23.42 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2154 (de 1)
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (415/415), hecho.
remoto: Comprimiendo objetos: 100% (415/415), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2154 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.68 KiB | 17.98 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (417/417), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
Recibiendo objetos: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2152 (de 1)
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (404/404), hecho.
remoto: Comprimiendo objetos: 100% (404/404), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 20.54 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetado automático del repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hechoremoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.68 KiB | 22.88 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (404/404), hecho.
remoto: Comprimiendo objetos: 100% (404/404), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.63 KiB | 19.74 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (415/415), hecho.
remoto: Comprimiendo objetos: 100% (415/415), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2154 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.68 KiB | 14.18 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (415/415), hecho.
Recibiendo objetos: 100% (2569/2569), 1007.14 KiB | 22.89 MiB/s, hecho.
Resolviendo deltas: 100% (2/2), hecho.
remoto: Total 2569 (delta 2), reutilizado 1 (delta 1), paquete reutilizado 2153 (de 1)
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.54 KiB | 22.37 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (404/404), hecho.
remoto: Comprimiendo objetos: 100% (404/404), hecho.
Recibiendo objetos: 100% (2569/2569), 1006.49 KiB | 22.37 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (de 1)
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.
remoto: Comprimiendo objetos: 100% (416/416), hecho.
remoto: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (de 1)
Recibiendo objetos: 100% (2569/2569), 1006.53 KiB | 22.37 MiB/s, hecho.
Resolviendo deltas: 100% (3/3), hecho.
Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remoto: Enumerando objetos: 2569, hecho.
remoto: Contando objetos: 100% (416/416), hecho.remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (desde 1)
Recibiendo objetos: 100% (2569/2569), 1006.53 KiB | 18.99 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (404/404), listo.
remote: Comprimiendo objetos: 100% (404/404), listo.
Recibiendo objetos: 100% (2569/2569), 1006.51 KiB | 22.37 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (desde 1)
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (404/404), listo.
remote: Comprimiendo objetos: 100% (404/404), listo.
Recibiendo objetos: 100% (2569/2569), 1006.51 KiB | 22.88 MiB/s, listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2165 (desde 1)
Resolviendo deltas: 100% (3/3), listo.
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (417/417), listo.
remote: Comprimiendo objetos: 100% (417/417), listo.
remote: Total 2569 (delta 2), reutilizado 0 (delta 0), paquete reutilizado 2152 (desde 1)
Recibiendo objetos: 100% (2569/2569), 1007.17 KiB | 13.80 MiB/s, listo.
Resolviendo deltas: 100% (2/2), listo.
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (416/416), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
Recibiendo objetos: 100% (2569/2569), 1006.56 KiB | 22.88 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (desde 1)
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (416/416), listo.
remote: Comprimiendo objetos: 100% (416/416), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2153 (desde 1)
Recibiendo objetos: 100% (2569/2569), 1006.56 KiB | 11.44 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual.
remote: Enumerando objetos: 2569, listo.
remote: Contando objetos: 100% (405/405), listo.
remote: Comprimiendo objetos: 100% (405/405), listo.
Recibiendo objetos: 100% (2569/2569), 1006.45 KiB | 21.88 MiB/s, listo.
Resolviendo deltas: 100% (3/3), listo.
remote: Total 2569 (delta 3), reutilizado 0 (delta 0), paquete reutilizado 2164 (desde 1)
Auto empaquetando el repositorio en segundo plano para un rendimiento óptimo.
Consulte "git help gc" para el mantenimiento manual..
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  3) class UpdateUserOptionsForThreadTitlePrompts 	ActiveRecord::Migration[7.0]
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  4)   def up
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  5)     change_column_default :user_options, :show_thread_title_prompts, true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  6)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  7)     if DB.query_single(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  8)          "SELECT 1 FROM user_options WHERE show_thread_title_prompts IS NULL LIMIT 1",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  9)        ).first
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 10)       batch_size = 100_000
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 11)       min_id = DB.query_single("SELECT MIN(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 12)       max_id = DB.query_single("SELECT MAX(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 13)       while max_id >= min_id
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 14)         DB.exec(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 15)           "UPDATE user_options SET show_thread_title_prompts = true WHERE user_id > #{max_id - batch_size} AND user_id <= #{max_id}",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 16)         )
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 17)         max_id -= batch_size
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 18)       end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 19)     end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 20)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 21)     change_column_null :user_options, :show_thread_title_prompts, false
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 22)   end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 23)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 24)   def down
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 25)   end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 26) end
:...skipping...
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  3) class UpdateUserOptionsForThreadTitlePrompts 
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  4)   def up
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  5)     change_column_default :user_options, :show_thread_title_prompts, true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  6)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  7)     if DB.query_single(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  8)          "SELECT 1 FROM user_options WHERE show_thread_title_prompts IS NULL LIMIT 1",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400  9)        ).first
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 10)       batch_size = 100_000
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 11)       min_id = DB.query_single("SELECT MIN(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 12)       max_id = DB.query_single("SELECT MAX(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 13)       while max_id >= min_id
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 14)         DB.exec(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 15)           "UPDATE user_options SET show_thread_title_prompts = true WHERE user_id > #{max_id - batch_size} AND user_id <= #{max_id}",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 16)         )
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 17)         max_id -= batch_size
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 18)       end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 19)     end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 20)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 21)     change_column_null :user_options, :show_thread_title_prompts, false
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 22)   end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 23)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 24)   def down
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 25)   end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 26) end
~

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.