Debian
locale
TAIGA
Taiga.IO

英語圏のTaiga.ioコンテナを使ったら日本語周りでハマった件について

これが、無知の恥...(;´Д`)


動機

今いるプロジェクトで、プロジェクト管理に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

今度は、警告も出ずに、ロケールの変更に成功しました!

image.png

そして、日本語のプロジェクト名でも、メンバーの追加ができました!!


おまけ

最初はaccon/taigaの方を使って、セットアップをしたんだけど、ユーザー登録画面で”プライバシーポリシーと利用規約に同意しろ”とエラーメッセージが出て進めない・admin画面がNotFoundで利用できなかったので、英語圏のコンテナを出したんです。

今回使ったコンテナでも、admin画面が出てこないんだよね・・・なんで??


参考リンク

Python 3の各種エンコーディングについて

https://qiita.com/methane/items/6e294ef5a1fad4afa843)

Dockerfileで日本語ロケールを設定する方法。およびロケールエラーの回避方法。

https://qiita.com/YuukiMiyoshi/items/f389ea366060537b5cd9