django二言語対応

こちらを主に参考にしました

narito.ninja

まず、makemessages で、権限がないと怒られます。 これはDocker使ってるのでDocker内で作成したstaticファイルがDocker内の権限になってることによります。

ならばとコンテナ内でmakemessagesコマンドを実行してみます。

今度はgettextがないと怒られます。 dockerfile に

apk add gettext

を追加します。*1

さて、このまま実行すると作成されたファイルがコンテナの権限になってしまい*2、外からいじれないので、以前別の記事でやったように、

timtoronto634.hatenablog.com

docker-compose run -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER) web django-admin makemessages -l ja

と書く。

すすめていくと、

PermissionError: [Errno 13] Permission denied: './static/admin/fonts/LICENSE.txt.py'

今度はPermissionErrorに捕まる。
staticfileの権限が同様にDocker権限になってるので、

docker-compose run -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER) web python manage.py collectstatic --no-input --clear
docker-compose run -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER) web django-admin makemessages -l ja

と、連続で実行する。これで万事解決した。

翻訳部分を書いた後にコンパイルする必要があるが、これも同様である。

いざ。

と、GCE上でデプロイしようとしたら、同じところで詰まった。そして今度はうまくPermissionErrorをかわすことができなかった。 OSがファイルシステムへのアクセスを禁止していることによるものかと推測するが、Dockerの権限のごちゃごちゃに加えて、docker-compose ではなくdocker-composeコンテナを使っていることもあり、原因がよくわからない。

ここまで来て気づいたのだが、djangoのコマンド自体はコンテナに対して実行すればいいので、docker-composeを経由しなくてよかった。

docker exec -it containerid django-admin makemessages -l ja

これで解決した。 めでたしめでたし。

*1:実際はチェインしているコマンドの中にgettextを追加しました

*2:windows,linux限定の問題