Eu só queria compartilhar uma experiência para os administradores menos habilidosos e com menos conhecimento que estão lutando com as coisas. Começou comigo perguntando sobre alguns problemas persistentes. Ele estava me dando comandos e me orientando nas coisas. Mas o verdadeiro avanço foi quando conectei o Claude code diretamente via SFTP e SSH…

Uma vez conectado, ele fez coisas incríveis! Nosso Discourse é usado apenas por um grupo de amigos, então não temos muito orçamento para fazer as coisas se algo der errado. Recentemente, o Claude Code encontrou todo tipo de coisinha errada na minha configuração.
-
Corrigiu minha configuração do S3 no Spaces. Eu estava perto, mas ainda havia alguns problemas com os ativos JS carregando corretamente na reconstrução. Saga completa aqui: Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO
- Ele ajustou tudo perfeitamente
-
Corrigiu o carregamento do JS do Discourse do X.com em vez de usar uma chave de API
-
Me guiou na configuração de CDN, configurações de DNS do Cloudflare e tudo mais
- Recompilou tudo
-
Encontrou 4.000 imagens órfãs do Tapatalk da nossa antiga migração do phpBB e as vinculou
-
Converteu um monte de BBCode antigo para HTML para que as imagens funcionassem
-
Descobriu que meu Volume da Digital Ocean estava completamente vazio e me deu confiança para apertar EXCLUIR e economizar R$/mês. Eu tinha movido tudo para o S3, ou pelo menos tinha certeza que sim, mas ainda estava nervoso para excluí-lo. É embaraçoso, na verdade, mas eu não queria perder nenhuma foto.
Mas o que foi ainda mais divertido foi que ele me deu confiança para assumir outro projeto, a ressurreição do nosso antigo fórum vBulletin que funcionou de 2002 a 2016 para um clube universitário. Ele caiu em desuso e foi finalmente aposentado depois de dar AIDS a alguns telefones. Ele conseguiu pegar um backup antigo, descompactá-lo e reconstruí-lo.
Ele fez um trabalho impressionante:
- Importou 12.394 tópicos e 282.096 postagens
- O banco de dados estava tão corrompido que exportamos partes dele como tabelas separadas, ou partes de tabelas, como CSVs, já que não fazia o arquivo SQL completo. Mais de 25 arquivos individuais. Ele juntou tudo e depois criou o arquivo de importação do Discourse.
- Migrou e reconectou 9.504 imagens do backup
- Então ele entrou e puxou algumas que faltavam da WayBackMachine e de outras importações. Eu dei a ele um backup de um phpGallery2 que usávamos na época e ele encontrou mais 288 imagens e as vinculou em outras 735 postagens.
- Eu simplesmente joguei diretórios e arquivos de backup zip nele e ele vasculhou e encontrou todo tipo de coisa e as conectou diretamente
- Infelizmente, não pôde fazer muito sobre as mais de 7.000 que estavam no Photobucket
- Puxou mais 780 imagens com link direto
- Recuperou 143 dos 159 nomes de usuário que haviam sido excluídos anteriormente e estavam aparecendo apenas como “system”
- Também encontrou seus avatares
- Ele até encontrou meu avatar antigo, uma foto do melhor garoto bom de todos!
- Censurou mais de 5.000 palavras “colegiais” carinhosamente conhecidas como: O RELATÓRIO DE INSULTOS
- Criou novos logotipos com base em alguns originais parciais que tinha dos arquivos
- Recuperou todos os emojis clássicos do vbulletin e os vinculou a todas as postagens
- Relatou que :flipoff2: foi o emoji mais usado (19.191 instâncias), seguido por :rolleyes : e :beer : (seguidores distantes)
- Permitiu alguma substituição de nomes, números de telefone ou e-mails que eram públicos.
- Me guiou na mudança para a API Resend
- Me guiou na configuração de SSL
- Me guiou na configuração de CORS
- Então, antes que entrássemos muito fundo, ele executou a varredura ClamAV em todos os arquivos
Ficou rodando em segundo plano por quase uma semana, aqui e ali ao longo de várias sessões. Tem sido uma janela divertida para o passado enquanto encontramos fotos e detalhes sobre viagens e projetos.
Também estou totalmente impressionado que existam humanos por aí que sabem o que isso está fazendo…
Permitir que o Claude execute cat \u003c\u003c ‘RUBY’ \u003e /tmp/tapatalk_analysis.rb posts_with_tapatalk = Post.where(“raw LIKE ‘%uploads/tapatalk/%’”).where(deleted_at: nil) dual_ref_count = 0 tapatalk_only_count = 0 tapatalk_only_files = posts_with_both = 0 posts_tapatalk_only = 0 posts_with_tapatalk.find_each do |post| raw = post.raw tapatalk_urls = raw.scan(/uploads/tapatalk/\[^\\s"'\u003c\u003e)\]\]+/) has_upload_ref = raw.include?(“upload://”) post_has_dual = false post_has_only = false tapatalk_urls.each do |url| idx = raw.index(url) next unless idx start_pos = \[idx - 200, 0\].max context = raw\[start_pos..idx + 10\] if context \u0026\u0026 context.include?(“upload://”) dual_ref_count += 1 post_has_dual = true else tapatalk_only_count += 1 post_has_only = true tapatalk_only_files \u003c\u003c url unless tapatalk_only_files.include?(url) end end posts_with_both += 1 if post_has_dual posts_tapatalk_only += 1 if post_has_only end puts “=== TAPATALK IMAGE ANALYSIS ===” puts “Dual reference (upload:// + tapatalk): #{dual_ref_count} refs” puts “Tapatalk only (no upload:// nearby): #{tapatalk_only_count} refs” puts “Unique tapatalk-only files: #{tapatalk_only_files.length}” puts “Posts with at least one dual ref: #{posts_with_both}” puts “Posts with at least one tapatalk-only ref: #{posts_tapatalk_only}” puts “—SAMPLE TAPATALK-ONLY FILES—” tapatalk_only_files.first(15).each { |f| puts f } RUBY scp /tmp/tapatalk_analysis.rb root@23.21.11.54:/tmp/ 2\u003e/dev/null \u0026\u0026 echo “Uploaded”?
Extremamente impressionante.
Enfim, eu só queria compartilhar caso a ideia possa ajudar a inspirar algo divertido para mais alguém. Faça um bom backup e mande ver!
Feliz Discourse’n. ![]()
