印刷(PNG保存)失敗トラブル対応メモ

以下は、今回発生した「印刷(PNG保存)失敗」の原因と対応を、再発防止用のメモとして整理したものです。
そのまま社内メモ/作業ログに貼れる体裁にしています。


印刷(PNG保存)失敗トラブル対応メモ

対象:kakimaru / tsubame(Flask + Playwright 構成)

1. 現象

  • Web画面上で「選択した画面をPNG保存」を実行すると失敗
  • 表示例
    失敗: /shot HTTP 500
    
  • kakimaru / tsubame の両方で再現(PC交換後)

2. 原因の全体像

本質的な原因

PC交換により Python 実行環境(venv・依存ライブラリ・Playwright/Chromium)が不整合になった

コードそのものは壊れていなかった。


3. 個別の原因と対処

(1) systemd が venv ではない Python で起動していた

原因

  • systemd は activate を通らない
  • ExecStart=python server.py のような指定だと
    • system python
    • pyenv の python
      を拾ってしまう

対処

systemd の ExecStartvenv の python の絶対パスに固定。

例:

ExecStart=/home/tomoi/kakimaru/venv/bin/python /home/tomoi/kakimaru/src/server.py
ExecStart=/home/tomoi/tsubame/src/.venv/bin/python /home/tomoi/tsubame/src/server.py

反映:

sudo systemctl daemon-reload
sudo systemctl restart <service-name>

(2) venv 内の pip / 依存パッケージが壊れていた

症状

  • pip show playwright 等で例外が出る
  • ModuleNotFoundError が連鎖的に発生

対処

  • venv を 作り直す
  • その後、依存を入れ直す
python3.12 -m venv venv
venv/bin/python -m pip install -U pip setuptools wheel

(3) Playwright は入っているが Chromium 本体が入っていなかった

症状

  • /shot が HTTP 500
  • Flask 側では Playwright 起動時に例外

対処

venv の python で Chromium を明示的に導入。

venv/bin/python -m playwright install chromium

必要に応じて OS 依存も導入:

sudo venv/bin/python -m playwright install-deps chromium

(4) psycopg2 が未導入、またはビルド失敗

症状

ModuleNotFoundError: No module named 'psycopg2'

または

fatal error: Python.h: No such file or directory

対処(開発環境)

venv/bin/python -m pip install psycopg2-binary

(本番用途でソースビルドが必要な場合は python3.12-dev 等を導入)


(5) systemd サービスと手動起動が混在していた

症状

Address already in use
Port XXXX is in use by another program

原因

  • systemd サービスが既に起動中
  • その状態で手動起動した

対処

  • 一度 service を停止
  • venv python で手動起動して動作確認
  • 問題なければ service を修正して再起動

4. 最終的に正常と判断できる状態

以下がすべて満たされていること:

  • systemd の ExecStart が venv の python を指している
  • ss -ltnp で該当ポートの python 実体が venv 配下
  • Web画面から「PNG保存」が成功
  • journalctl に Playwright / Chromium エラーが出ていない

5. 教訓・再発防止策

  • systemd + Python アプリでは、必ず venv の python を絶対パス指定
  • PC交換・OS再構築時は
    • venv
    • pip
    • Playwright + Chromium
      を「必ず再確認」
  • 「コードは正しいが環境が壊れている」ケースは多い
    → まず疑うのは 実行 python と依存関係

以上です。
このメモがあれば、次回同様のトラブルは 最短で切り分け・復旧できます。

未分類

Posted by ebata