1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-25

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

動機

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

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?