これが、無知の恥...(;´Д`)
動機
今いるプロジェクトで、プロジェクト管理にTaiga.ioを使うことになり、そのセットアップを行ったのですが、少しハマったので、調べた結果をメモ程度に。
教訓(せっかちさんのために、最初に書いておく)
- Dockerコンテナ内の環境は最低限のものしかない(基本インストール必須)
- 英語圏の物を使うときは、ロケールに気を付ける。
- インストールされていないロケールを設定すると、LANG=C扱いになりPythonはASCIIで読み書きする(?)
- Dockerfieを編集したら、buildしましょう。(今回は、docker-compose up --build)
問題発生
英語圏のtaigaioのDockerコンテナ:*benhutchins/taiga*を使ってセットアップ
試用中にプロジェクト名に日本語を使ったら、メンバーの招待機能で障害発生(エンコードエラーで落ちる)
File "/usr/src/taiga-back/taiga/projects/services/invitations.py", line 34, in send_invitation
email.send()
File "/usr/local/lib/python3.5/site-packages/django/core/mail/message.py", line 342, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/console.py", line 36, in send_messages
self.write_message(message)
File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/console.py", line 23, in write_message
self.stream.write('%s\n' % msg_data)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 618-620: ordinal not in range(128)
[
ロケールを変えるも・・・
- ロケール設定を疑って、"ja_jp.utf-8"に設定すると、そんなものはないと怒られる。
root@754a0075dd4f:/usr/src/taiga-back# export LC_ALL="ja_JP.utf8"
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.utf8): No such file or directory
確認は大事です。
locale -a
で、利用可能なロケールを確認すると、無い。
日本語がありません。そりゃあ、動きませんわ・・・
コンテナに割と入ってないもんなんだな・・・。(英語圏だし、これが当然?)
>locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
無いなら、入れるまで。
ようやっとDockerFileをいじいじするお時間です。
RUN apt-get update && apt-get install -y locales locales-all
RUN localedef -i ja_JP -f UTF-8 ja_JP.utf8
(中略)
ENV LC_ALL ja_JP.utf8
このあと、docker-compose up
で、コンテナ立ち上げても、インストールが走らねぇ!?と泡食いました。
(ビルドするという発想が頭に再ロードされるまで)
かくにんは大事です(2回目
root@a1ef238657c9:/usr/src/taiga-back# locale -a | grep "ja"
ja_JP.eucjp
ja_JP.utf8
root@a1ef238657c9:/usr/src/taiga-back# locale
LANG=ja_JP.utf8
LANGUAGE=
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=ja_JP.utf8
今度は、警告も出ずに、ロケールの変更に成功しました!
そして、日本語のプロジェクト名でも、メンバーの追加ができました!!
おまけ
最初は*accon/taiga*の方を使って、セットアップをしたんだけど、ユーザー登録画面で”プライバシーポリシーと利用規約に同意しろ”とエラーメッセージが出て進めない・admin画面がNotFoundで利用できなかったので、英語圏のコンテナを出したんです。
今回使ったコンテナでも、admin画面が出てこないんだよね・・・なんで??
参考リンク
Python 3の各種エンコーディングについて
https://qiita.com/methane/items/6e294ef5a1fad4afa843)
Dockerfileで日本語ロケールを設定する方法。およびロケールエラーの回避方法。
https://qiita.com/YuukiMiyoshi/items/f389ea366060537b5cd9