Djangoで日本語名のファイルアップロード時にエラー
ひさびさにUnicodeEncodeErrorなんてものを見た気がする。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-19: ordinal not in range(128)
以前も同じようなことがあって、そのときはgunicornを起動している環境の環境変数でLC_TYPE=ja_JP.UTF-8が指定すれば解決した。
関連:djangoで日本語名のファイルアップロード時のエラー - brainstorm
今回も同じかと思って環境変数を確認したらLC_TYPEはちゃんと設定されていた。
$ env | grep ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8 LANGUAGE=ja_JP.UTF-8 LC_CTYPE=ja_JP.UTF-8
で調べた結果、gunicornをUpstartで起動させる場合、Upstartの設定ファイル中でexport LC_ALL=ja_JP.UTF-8しておく必要があるらしい。
適当なサンプル
description "my website" start on runlevel [2345] stop on runlevel [06] respawn script # 省略 export LC_ALL=ja-JP.UTF-8 # <- 追加 exec gunicorn ....... # 省略 end script
上記のように設定ファイルを修正後、initctl restartではなく、stop/startをすると問題は解決した。