ActivityPubサーバーのバグ修正メモ

2025/3/29 [10:02:19] (土) 天気

ここんとこ時間もあるので、おひとり様サーバーの機能追加やバグ修正。

忘れないようにメモしておこう。


・仏語アクサンや独語ウムラウトまじりの投稿で文字化けを起こしてJSONのdecodeで失敗していた。


JSON.pmは文字コードというかutf8フラグの扱いにクセがあって。

decode_jsonに渡すJSONはutf8フラグがついていてはいけない/事前にutf8フラグを外す必要がある。


なので、事前にEncode::is_utf8でutf8フラグの有無を調べて、utf8フラグがついてたらEncode::encode(’utf8’,JSON)などと、utf8フラグを外して渡してた。


アクサンやウムラウトは見た目1文字

「â」「ë」

だけど、コードポイントは2バイト使う(日本語などは3バイト)ので、スクリプトではutf8フラグをつけて扱う(検索などにそのまま使えるから)

これをEncode::is_utf8でうまく検知できてなかったっぽい…「ぽい」というのは、まだしっかり特定できてないから。

evalでdecode_jsonを括って$@でエラーを捕捉してるところ、エラーが出たらもう一度同じ処理を入れることにした。原因追求をさぼって結果オーライ、というのは昔からの得意技(技?



・お相手サーバーの生存確認を追加した。


応答の確認に時間がかかるサーバーがあった。セッション切れを起こしてしまうのは致命的。


「LWPでtimeout指定が効かない」

https://t2aki.doncha.net/?id=1731205503

↑この対応で解決したはずなのに、このtimeoutの処理が効いていないサーバーがあった。

同じ500番代なのになんでだろ…。


てことで、投稿を配送する前にお相手サーバーが応答してるかどうかの確認することにした。

lwpでリクエストを投げてもたぶん同じことだろうし、Net::Pingを使うことにした。

今のところ意図通りに捕捉できてる。



・アナウンスした時にフォロワーさん以外に通知が飛ばない。


Activityの配送先は自分のフォロワーさん。なので「自分のフォロワーさんじゃないアカウント」の投稿をAnnounce(ブースト、リポスト、リノート)したら、そのアカウントにも配送する必要がある、ということをすっかり忘れてた。


AnnounceするActivityの投稿者をフォロワーリストで確認。

フォロワーリストに入ってなかったら、配送先に追加。



細々というか、2年近く使ってるというのに、いろいろ出てくるもんだ。


image

けっこうなスピードで疾走感があった。楽しそうでいいよねえ。

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】