Claude Code - vBulletin Muerto Resucitado de 2016

Solo quería compartir una experiencia para los administradores menos capacitados y con menos conocimientos que están luchando con las cosas. Comenzó cuando le pregunté sobre algunos problemas persistentes. Me estaba dando comandos y guiándome a través de las cosas. Pero el verdadero avance fue cuando conecté Claude code directamente a través de SFTP y SSH…

image

¡Una vez conectado, hizo cosas increíbles! Nuestro Discourse solo lo usa un grupo de amigos, por lo que no tenemos mucho presupuesto para hacer cosas si algo sale mal. Recientemente, Claude Code encontró todo tipo de pequeñas cosas incorrectas en mi configuración.

  • Corrigió mi configuración de S3 en Spaces. Estaba cerca, pero todavía tenía algunos problemas con la carga correcta de los activos de JS en la reconstrucción. Saga completa aquí: Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO

    • Lo ajustó perfectamente
  • Arregló la carga de JS de Discourse de X.com en lugar de usar una clave de API

  • Me guió a través de la configuración de CDN, la configuración de DNS de Cloudflare y todo

    • Lo horneó todo de nuevo
  • Encontró 4,000 imágenes huérfanas de Tapatalk de nuestra antigua migración de phpBB y las vinculó

  • Convirtió un montón de BBCode antiguo a HTML para que las imágenes funcionaran

  • Descubrió que mi volumen de Digital Ocean estaba completamente vacío y me dio la confianza para presionar ELIMINAR y ahorrar $/mes. Había movido todo a S3, o al menos estaba bastante seguro de que lo había hecho, pero todavía estaba demasiado nervioso para eliminarlo. Realmente vergonzoso, pero no quería perder ninguna foto.

Pero lo que fue aún más divertido fue que me dio la confianza para emprender otro proyecto, la resurrección de nuestro antiguo foro vBulletin que se ejecutó de 2002 a 2016 para un club universitario. Cayó en el desuso y finalmente fue retirado después de darle el VIH a algunos teléfonos. Pudo tomar una copia de seguridad antigua, descomprimirla y reconstruirla.

Hizo un trabajo impresionante:

  • Importó 12,394 temas y 282,096 publicaciones
    • La base de datos estaba tan corrupta que exportamos partes de ella como tablas separadas, o partes de tablas, como archivos CSV ya que no haría el archivo SQL completo. Más de 25 archivos individuales. Lo unió y luego creó el archivo de importación de Discourse.
  • Migró y reconectó 9,504 imágenes de la copia de seguridad
    • Luego entró y extrajo algunas imágenes faltantes de la WayBackMachine y otras importaciones. Le di una copia de seguridad de un phpGallery2 que usamos en ese entonces y encontró 288 imágenes más y las vinculó en otras 735 publicaciones.
    • Simplemente le lancé directorios y archivos zip de copia de seguridad y clasificó y encontró todo tipo de cosas y las conectó directamente
    • Desafortunadamente, no pudo hacer mucho con las más de 7,000 que estaban en Photobucket
    • Extrajo otras 780 imágenes enlazadas
  • Recuperó 143 de 159 nombres de usuario que habían sido eliminados anteriormente y solo se mostraban como “system”
    • También encontró sus avatares
    • ¡Incluso encontró mi avatar antiguo, una foto del mejor chico bueno de todos!
  • Censuró más de 5,000 palabras “colegiales” conocidas cariñosamente como: EL INFORME DE INSULTOS
  • Creó nuevos logotipos basados en algunos parciales que tenía de los archivos
  • Recuperó todos los emojis clásicos de vbulletin y los vinculó a todas las publicaciones
    • Informó que :flipoff2: fue el emoji más utilizado (19,191 instancias), seguido por :rolleyes : y :beer : (seguidores distantes)
  • Permitió algunas búsquedas y reemplazos en nombres, números de teléfono o correos electrónicos que eran públicos.
  • Me guió a través de la migración a Resend API
  • Me guió a través de la configuración de SSL
  • Me guió a través de la configuración de CORS
  • Luego, antes de que nos metiéramos demasiado, ejecutó el escaneo ClamAV en todos los archivos

Estuvo funcionando en segundo plano casi una semana, aquí y allá a lo largo de varias sesiones. Ha sido una ventana divertida al pasado mientras encontramos fotos y detalles sobre viajes y proyectos.

También estoy totalmente impresionado de que haya humanos por ahí que sepan lo que esto está haciendo…

Permitir que Claude ejecute 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”?

Extremadamente impresionante.

De todos modos, solo quería compartir en caso de que la idea pudiera ayudar a estimular algo divertido para cualquier otra persona. ¡Consigue una buena copia de seguridad y déjalo correr!

Feliz Discourse’n. :victory_hand:

8 Me gusta