Work 19
Convio
動画を音声 10 形式・動画 5 形式へ変換する個人 SaaS。非同期変換キュー・サブスク課金・本番障害の根本原因究明まで一人で回した
- 2026-08-24 の本番障害『処理中の固着』を 2 つの根本原因まで特定 — (1) Celery の FAILURE state に dict meta を渡すと AsyncResult.state が ValueError を吐き永久 pending 化する (2) AsyncResult(id) を app 未指定で使うと gunicorn gthread のスレッドローカルで DisabledBackend に解決される
- 同じコミットで回帰テストを追加(tests/test_convert_api.py 225 行、tests/test_task_manager.py 323 行ほか約 750 行)
- TaskManager を単一プロセス前提のインメモリから Redis 裏書きへ移行し、Gunicorn マルチワーカー間で状態共有
- デスクトップアプリ配布(PyInstaller)からサーバー運用へ、配布形態そのものを転換した意思決定が git に残る