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

连接后,它做了一些了不起的事情!我们的 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”?
非常令人印象深刻。
总之,我只是想分享一下,以防这个想法能激发其他人做一些有趣的事情。准备好一个好的备份,然后放手去做吧!
论坛愉快。![]()
