Redmineでの日本語を利用について

Redmineをdockerに構築後、使用中に引っ掛かった事について覚書。

構築時の記事
marusho1266.com


Redmineでユーザを作成しようとしたところ、以下のエラーが発生した。

色々調べた結果、ユーザ名に日本語を利用していることが原因のようだった。
日本語を使わないことは正直出来ないので、何とか対応する方向に。

結論としては、コンテナの設定を変えることで対応が出来そう。

以下対応内容。

  • コンテナの停止

まずは念のためコンテナを停止する。

  • docker-compose.ymlの修正

ymlの各serviceに以下の追記を行う。

Redmine

      # 以下の環境変数を追加
      RAILS_ENV: production
      REDMINE_DB_ENCODING: utf8

MySQL

      # 以下の環境変数を追加
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

Volumes

volumes
  redmine_plugins:

※yml全文は記事の最後に記載

  • コンテナの再作成

ymlを修正した状態でコマンドプロンプトから以下を実行。

docker-compose up -d

これで上手くいくはずなのだが、日本語を含んで登録しても変わらずInternal errorが発生する。

以下のコマンドでコンテナを削除してから作成してもダメ。

docker rm [コンテナID]

色々とハマった結果、一番最初にコンテナを作成した時に、データ永続化を行っているので、コンテナを削除してもMySQLのデータは残っている状態になっている事が原因のよう。

このせいでymlを更新しても日本語の登録が出来ないと思われる。
※本来はデータが保持されている方が正しい。

完全に消すには、作成されたボリュームを指定して削除する必要があるので、以下のコマンドでボリュームを削除する。

docker volume rm [ボリューム名]

その前に、以下のコマンドで作成されているボリュームを確認

docker volume ls

こんな感じで3つのvolumeをすべて削除。

この状態で、再度コンテナを作成し、ユーザ登録をしてみる。

無事登録完了。

  • 修正後のdocker-compose.yml全文
version: '3'

services:
  redmine:
    image: redmine:latest
    ports:
      - "3000:3000"
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: password
      REDMINE_SECRET_KEY_BASE: supersecretkey
      # 以下の環境変数を追加
      RAILS_ENV: production
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - db
    volumes:
      - redmine_files:/usr/src/redmine/files
      - redmine_plugins:/usr/src/redmine/plugins

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: redmine
      # 以下の環境変数を追加
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - mysql_data:/var/lib/mysql


volumes:
  mysql_data:
  redmine_files:
  redmine_plugins: