Claude Code - 2016年复活的Dead vBulletin

我只是想为那些在摸索中的技能较弱、知识较少的管理员分享一下我的经历。一开始我向它询问一些遗留问题。它给我提供了命令并指导我完成操作。但真正的突破是当我通过 SFTP 和 SSH 直接连接 Claude 代码时……

image

连接后,它做了一些了不起的事情!我们的 Discourse 只是供一群朋友使用,所以如果出现问题,我们的预算不多。最近 Claude Code 发现了我的配置中各种各样的小问题。

  • 修正了我的 S3 on Spaces 设置。我差不多做对了,但 JavaScript 资源在重建时加载仍然存在一些问题。完整经过请看这里:Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO

    • 它把它调整好了
  • 修复了 X.com Discourse 加载 JS 而不是使用 API 密钥的问题

  • 指导我完成了 CDN 设置、Cloudflare DNS 设置等所有内容

    • 对所有内容进行了重新烘焙
  • 它发现了我们旧的 phpBB 迁移留下的 4,000 个孤立的 Tapatalk 图像,并将它们关联起来了

  • 将大量旧的 BBCode 转换为 HTML,以便图像可以正常显示

  • 它发现我的 Digital Ocean 卷是完全空的,给了我删除它的信心,每月节省了 $。我已将所有内容移至 S3,或者至少我相当确定我已经这样做了,但我仍然太紧张不敢删除它。说实话有点尴尬,但我不想丢失任何照片。

但更有趣的是,它给了我信心去承担另一个项目,复活我们大学俱乐部从 2002 年到 2016 年运行的旧 vBulletin 论坛。它年久失修,在给了几部手机“艾滋病”(指损坏或无法使用)后最终退役了。它能够获取旧的备份并解包重建它。

它完成了出色的工作:

  • 导入了 12,394 个主题和 282,096 篇帖子
    • 数据库损坏严重,以至于我们不得不将部分内容作为单独的表或表的片段以 CSV 格式导出,因为它无法处理完整的 SQL 文件。超过 25 个单独的文件。它将它们拼接起来,然后创建了 Discourse 导入文件。
  • 从备份中迁移并重新连接了 9,504 张图片
    • 然后它从 WayBackMachine 和其他导入中提取了一些缺失的图片。我给它一个我们当时使用的 phpGallery2 的备份,它找到了另外 288 张图片,并将它们关联到其他 735 篇帖子中。
    • 我只是把目录和 zip 备份文件扔给它,它就整理并找到了各种东西并把它们正确地连接起来
    • 遗憾的是,对于 Photobucket 上的 7,000 多张图片,它帮不上什么忙
    • 导入了另外 780 张热链接的图片
  • 恢复了 159 个用户名中被删除且仅显示为“system”的 143 个用户名
    • 还找到了它们的头像
    • 它甚至找到了我以前的头像,那是关于有史以来最好的好男孩的照片!
  • 审查了 5,000 多个“大学”* *** *** 词,这些词被亲切地称为:禁语报告
  • 根据它从文件中找到的一些旧片段创建了新徽标
  • 恢复了所有经典的 vbulletin 表情符号,并将它们关联到所有帖子中
    • 它报告说 :flipoff2: 是使用最多的表情符号(19,191 次),其次是 :rolleyes : 和 :beer :(遥遥领先)
  • 允许对公开的姓名、电话号码或电子邮件进行查找和替换
  • 指导我迁移到 Resend API
  • 指导我进行 SSL 配置
  • 指导我进行 CORS 配置
  • 然后在我们深入研究之前,它对所有文件运行了 ClamAV 扫描

它在后台运行了将近一周,在多次会话中时断时续。当我们找到有关旅行和项目的图片和细节时,这是一扇通往过去的有趣窗口。

我也对那些知道这在做什么的人类深感敬佩……

允许 Claude 运行 cat << ‘RUBY’ > /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"'<>\]\]+/)
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 && context.include?(“upload://”)
dual_ref_count += 1
post_has_dual = true
else
tapatalk_only_count += 1
post_has_only = true
tapatalk_only_files << 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>/dev/null && echo “Uploaded”?

非常令人印象深刻。

总之,我只是想分享一下,以防这个想法能激发其他人做一些有趣的事情。准备好一个好的备份,然后放手去做吧!

论坛愉快。:victory_hand:

9 个赞