LoginSignup
0
0

Django4.2にアップグレードしたらrembgがApache2+mod_wsgiで動かなくなった場合の解決

Posted at

Django4.2からデータモデルのマイグレーションにdb_commentが追加されてドキュメントに便利なので喜んでアップグレードしたところ、Apache+mod_wsgiのWebアプリケーション経由で動かしていたrembgのimportでエラーが発生して動かなくなった時の解決方法の共有です。

環境はAmazonLinux2023ですがCentOS7以降でも同じだと思います。

pip install --upgrade djangoでアップグレードしたところ依存パッケージもアップグレードしてしまい、500 Internal server errrorになってしまいdjangoのコマンドやrunserverではエラーが発生しません。

以下のランタイムエラーが/var/log/httpd/error_logに出ています。

RuntimeError: cannot cache function '_make_tree': no locator available for file '/home/ec2-user/.pyenv/versions/3.10.11/lib/python3.10/site-packages/pymatting/util/kdtree.py'

トレースバックを追うと以下のようにfrom rembg import removeのところでこけていました。

from rembg import remove
/home/hoge/.pyenv/versions/3.10.11/lib/python3.10/site-packages/rembg/bg.py", line 16, in <module>
  from pymatting.alpha.estimate_alpha_cf import estimate_alpha_cf
...()...
  disp.enable_caching()
    File "/home/hoge/.pyenv/versions/3.10.11/lib/python3.10/site-packages/numba/core/dispatcher.py", line 863, in enable_caching
...()...
File "/home/hoge/.pyenv/versions/3.10.11/lib/python3.10/site-packages/numba/core/caching.py", line 337, in __init__
...()...
File "/home/hoge/.pyenv/versions/3.10.11/lib/python3.10/site-packages/numba/core/caching.py", line 337, in __init__

raise RuntimeError("cannot cache function %r: no locator available "

というわけでnumbaのパッケージでエラーになっている様子。
調べるとnumbaの0.48より大きいバージョンではキャッシュディレクトリのパスを環境変数に設定しないとエラーが出る様になった様です。

systemctlコマンドで起動時に環境変数を渡せる様にするため、httpdのserviceファイルの位置を確認。

sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
     Active: active (running) since Tue 2023-08-08 11:05:06 UTC; 31min ago
       Docs: man:httpd.service(8)
   Main PID: 122657 (httpd)
     Status: "Total requests: 35; Idle/Busy workers 100/0;Requests/sec: 0.0187; Bytes served/sec: 1.1KB/sec"
      Tasks: 242 (limit: 18904)
     Memory: 984.5M
        CPU: 1min 27.413s
     CGroup: /system.slice/httpd.service
             ├─122657 /usr/sbin/httpd -DFOREGROUND
             ├─122659 /usr/sbin/httpd -DFOREGROUND
             ├─122660 /usr/sbin/httpd -DFOREGROUND
             ├─122662 /usr/sbin/httpd -DFOREGROUND
             ├─122672 /usr/sbin/httpd -DFOREGROUND
             └─122841 /usr/sbin/httpd -DFOREGROUND

ということで/usr/lib/systemd/system/httpd.serviceにサービスの起動ファイルがあるので、こちらに環境変数設定行を追加。

...()...
[Service]
Type=notify
Environment=LANG=C
Environment=NUMBA_CACHE_DIR=/tmp # ここを追加

以上、これでsystemctl restart httpdで行けました。
rembgもWebアプリケーション上で無事動きました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0