- ubuntu20.04
- apache2
- mod_wsgi (
pip3 install mod_wsgi
でインストール)
ローカルPCで、flaskを使った自作アプリケーションをapache+mod_wsgiで使っているのですが、ubuntuを20.04にしたら、例外が発生するようになってしまいました。
[Wed Apr 29 04:26:54.738674 2020] [wsgi:error] [pid 38764:tid 140083800012544] UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-23: ordinal not in range(128)
発生しているのはopen
関数を呼び出しているところで、対象は日本語ファイル名なので、おそらくそれが問題ではないかと推測。
試しにsys.getfilesystemencoding
メソッドで確認してみると、確かに「ascii
」が返ってきました。
しかし、ubuntu19.10までは動いていたので、以前は「utf-8
」だったんだろうか。
さて、sys.getfilesystemencoding
のマニュアルによれば、「ロケールのエンコーディング」に設定されるそうなので、通常であれば環境変数「LANG」辺りを設定すればいいんでしょうけど、今回の場合はどうすればいいんだろう…。
とりあえず、mod_wsgi
のマニュアルを読んでみました。
どうやら「locale=locale
」という設定項目があるらしいので(「lang=locale
」もあるけど、どちらがいいのだろう)、それを設定してみました。
<VirtualHost *:80>
WSGIDaemonProcess app locale=ja_JP.UTF-8
WSGIScriptAlias /app /path/to/wsgi.py
<Location /app>
WSGIProcessGroup app
Require all granted
</Location>
</VirtualHost>
これで例外が発生しなくなりました。