Claude Code - vBulletin Morto Ressuscitado de 2016

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…

image

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. :victory_hand:

8 curtidas