Configurei um novo host para ter um ambiente de ‘staging’. Recriei a mesma instalação do Discourse com o que deveria ser a mesma versão. Estou executando a versão: 2.8.2.
Primeiro comentário, a partir da versão 2.8.2, o tamanho do meu backup caiu de 282MB para cerca de 90MB. Não sei por quê, mas vou prosseguir com alguma inteligência adicionada que estou aproveitando.
Baixei o último arquivo do meu fórum e fiz o upload para o armazenamento local no novo ambiente de staging.
A restauração falha devido a:
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] Migrando o banco de dados...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] Reconectando ao banco de dados...
[2022-02-27 19:43:00] Recarregando configurações do site...
[2022-02-27 19:43:00] Desabilitando e-mails de saída para usuários não administradores...
[2022-02-27 19:43:02] Desabilitando modo somente leitura...
[2022-02-27 19:43:02] Limpando cache de categoria...
[2022-02-27 19:43:02] Recarregando traduções...
[2022-02-27 19:43:02] Remapeando uploads...
[2022-02-27 19:43:02] Remapeando 'https://forum.geekbeacon.org' para 'https://forum-staging.geekbeacon.org'
[2022-02-27 19:43:08] Restaurando uploads, isso pode levar algum tempo...
[2022-02-27 19:43:36] EXCEPTION: 8 posts não foram remapeados para o novo URL de upload S3. A migração S3 falhou para o banco de dados '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] Tentando reverter...
[2022-02-27 19:43:36] Revertendo...
[2022-02-27 19:43:36] Limpando...
[2022-02-27 19:43:36] Eliminando funções do schema discourse_functions...
[2022-02-27 19:43:36] Removendo diretório temporário '/var/www/discourse/tmp/restores/default/2022-02-27-194051'...
[2022-02-27 19:43:36] Despausando sidekiq...
[2022-02-27 19:43:36] Marcando restauração como concluída...
[2022-02-27 19:43:36] Notificando 'csgeek' sobre o fim da restauração...
Este é o seu problema. Talvez usar o mesmo bucket S3 e usar o mesmo bucket? Talvez verifique se a configuração oculta que se chama algo como “download S3 no backup” está ativada. Você precisará pesquisar ou procurar no código-fonte o nome da configuração.
Ou talvez você precise verificar se o restante dos seus uploads no site de produção estão no S3.
Não tenho S3 configurado. Imagino que o servidor antigo tenha alguns dados antigos que não foram mapeados para um local S3 válido.
Voltei ao servidor antigo e tenho 2 buckets configurados, 1 para backups e 1 para mídia. Segui o guia e configurei o AWS S3, incluindo o CDN.
Quando executo rake uploads:migrate_to_s3, que falhou, segui com um posts:rebake e isso parece ter reduzido o número de erros, mas ainda falha:
Por favor, note que a migração para S3 atualmente não é reversível!
[CTRL+c] para cancelar, [ENTER] para continuar
Migrando uploads para S3 para 'default'...
Enviando arquivos para S3...
- Listando arquivos locais
=> 208 arquivos
- Listando arquivos S3
. => 978 arquivos
- Sincronizando arquivos para S3
................................................................................................................................................................................................................
Atualizando os URLs no banco de dados...
Removendo imagens otimizadas antigas...
Marcando todos os posts contendo lightboxes para rebake...
15 posts foram marcados para rebake
rake abortou!
FileStore::ToS3MigrationError: 1 posts não foram remapeados para o novo URL de upload S3. A migração S3 falhou para o banco de dados '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>'
Tarefas: TOP => uploads:migrate_to_s3
(Veja o rastreamento completo executando a tarefa com --trace)
Existe alguma maneira de executar migrate_to_s3 em modo verboso para identificar o post que é o culpado?
Se o seu restauro está falhando com um erro como este?
FileStore::ToS3MigrationError: 1 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
Nesse caso, a melhor coisa a fazer é corrigir o(s) post(s) que têm uploads no lugar errado. Mas eu acho que há um caso em que esse teste pode ter um falso positivo. Nesse caso, você pode usar uma opção na tarefa rake que fará com que ela pause para que você possa corrigir as coisas. Não consigo encontrar rapidamente, e não está em Backup discourse from the command line onde deveria estar. Estou no meio de uma tarefa, então não consigo encontrar agora.
Isso pausará a restauração e você poderá mexer no banco de dados em outro terminal para corrigi-lo. Ou, eu acho, você pode simplesmente pará-lo antes que ele faça essa verificação.
Sincronizando arquivos com o S3
..
Atualizando os URLs no banco de dados…
Removendo imagens otimizadas antigas…
Marcando todas as postagens contendo lightboxes para reprocessamento (rebake)…
169809 postagens foram marcadas para reprocessamento EXCEÇÃO: 3 postagens não foram mapeadas para o novo URL de upload do S3. A migração do S3 falhou para o banco de dados ‘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 ’
Tentando reverter (rollback)…
Revertendo…
Limpando coisas…
Removendo funções do schema discourse_functions…
Removendo o diretório tmp ‘/var/www/discourse/tmp/restores/default/2026-01-13-145033’…
Despausando sidekiq…
Marcando a restauração como concluída…
Notificando ‘system’ sobre o fim da restauração…
Concluído!
Eu daria uma olhada no código que faz esse teste e então executaria a mesma consulta. Eu posso ter postado o código para fazer isso antes.
Eu postei
Você fez isso? Eu acho que você pode simplesmente usar control-c depois que a restauração terminar. Você está fazendo uma restauração apenas do banco de dados?
Ah droga, eu não tinha pensado em parar a restauração depois do banco de dados e antes dos uploads.
Eu não preciso mover os uploads do S3 — posso apenas migrar o frontend e o banco de dados?
Você pode me dizer qual opção permite parar o rake em posts e identificar os problemáticos? Isso seria muito apreciado.