Claude Code - 2016年版の死んだvBulletinの復活

知識やスキルが浅い管理者の方々が奮闘している経験を共有したいと思いました。最初は、残っている問題について尋ねたところ、Claudeはコマンドを出したり、手順を説明してくれたりしました。しかし、真のブレークスルーは、Claude CodeにSFTPとSSH経由で直接接続したときでした…

image

接続すると、驚くべきことをしてくれました!私たちのDiscourseは友人グループでのみ使用しているため、何か問題が発生した場合に使える予算があまりありません。最近、Claude Codeは私の設定に関するさまざまな小さな問題を見つけてくれました。

  • SpacesのS3設定を修正しました。かなり近づいていましたが、再構築時にJSアセットが正しくロードされるという点でまだ問題がありました。完全な経緯はこちら:Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO

    • それを完全に調整してくれました
  • X.com DiscourseがAPIキーを使用する代わりにJSをロードするのを修正しました

  • CDNの設定、CloudflareのDNS設定など、すべてについて手順を説明してくれました

    • すべてを再ベイクしました
  • 古いphpBBからの4,000個の孤立したTapatalk画像を検出し、それらを関連付けました

  • 画像が機能するように、古いBBCodeをHTMLに変換しました

  • Digital Oceanボリュームが完全に空であることを検出し、DELETEを押して月々の費用を節約する自信を与えてくれました。すべてをS3に移動したつもりでしたが、まだ削除するのに神経質になっていました。恥ずかしい話ですが、写真を失いたくありませんでした。

しかし、さらに楽しかったのは、2002年から2016年まで大学のクラブで使用していた古いvBulletinボードを復活させるという別のプロジェクトに取り組む自信を与えてくれたことです。それは荒廃し、数台の電話にHIVを感染させた後、ついに引退しました。古いバックアップを取り込み、解凍して再構築することができました。

それは印象的な仕事をしました:

  • 12,394のトピックと282,096の投稿をインポートしました
    • データベースがひどく破損していたため、完全なSQLファイルとしてではなく、CSVとして個別のテーブル、またはテーブルの一部をエクスポートしました。25以上の個別のファイルです。それを組み立て、Discourseインポートファイルを作成しました。
  • バックアップから9,504の画像を移行し、再接続しました
    • その後、WayBackMachineやその他のインポートから不足している画像をいくつか取得しました。当時のphpGallery2のバックアップを渡し、さらに288個の画像を見つけて735の他の投稿全体にリンクさせました。
    • ディレクトリやzipバックアップファイルを渡すだけで、それらすべてを整理し、あらゆる種類のものを探し出して正しく接続しました
    • 残念ながら、Photobucketにあった7,000以上のものについてはあまりできませんでした
    • ホットリンクされていた別の780個の画像をプルしました
  • 以前に削除され、「system」として表示されていた159のユーザー名のうち143を復元しました
    • アバターも見つけました
    • 史上最高の良い子の写真である私のかつてのアバターさえ見つけました!
  • 愛情を込めて「THE SLUR REPORT」として知られる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"'\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 && 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”?`

全くもって印象的です。

とにかく、このアイデアが他の誰かの楽しいきっかけになるかもしれないと思い、共有したかっただけです。良いバックアップを手に入れて、思い切りやってみてください!

ハッピーDiscourseライフを。:victory_hand:

「いいね!」 7