Ubuntu 20.04のRedmineに入れたchecklistsプラグイン 3.1.20で日本語を入れてみたところInternal Server Errorが出てしまった。production.logを確認したところ以下の様なエラーが出ていた。
ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE2\x91\xA0202...' for column 'subject' at row 1: INSERT INTO `checklists` (`subject`, `issue_id`, `created_at`, `updated_at`) VALUES ('ほげほげ', 306, '2022-01-14 22:26:46', '2022-01-14 22:26:46')):
調べてみると以下の情報がヒットした。
https://qiita.com/tomaaaaaaaa/items/08ce75b95df3d310817a
確かにcharacter_set_databaseがlatin1になっていた。。。これは、database.yml にcharset: utf8が入ってなかったためのようです。(encoding: utf8は入っていたので、Redmine自体は日本語が使えており気づきませんでした。)
作ってしまった今から設定を変えても作ってしまったDBには影響しないので、変換してやる必要があります。以下の情報をもとに、どのテーブルがlatin1でできてしまっているか調べてみると、checklist系のテーブルだけでした。
https://www.karakaram.com/changing-the-character-set-to-utf8mb4-after-creating-mysql-table/
SELECT TABLE_NAME,TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=’DB名’;
| checklist_template_categories | latin1_swedish_ci|
| checklist_templates | latin1_swedish_ci|
| checklists | latin1_swedish_ci|
この3つのテーブルをutf8に変換します。
ALTER TABLE checklist_template_categories
CONVERT TO CHARACTER SET utf8
COLLATE utf8_general_ci;
ALTER TABLE checklist_templates
CONVERT TO CHARACTER SET utf8
COLLATE utf8_general_ci;
ALTER TABLE checklists
CONVERT TO CHARACTER SET utf8
COLLATE utf8_general_ci;
とりあえず、直りました 🙂
今後のために、以下を入れておきました。
/etc/redmine/default/database.yml
charset: utf8
encoding: utf8
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
character-set-server=utf8
あと気になったのが、chrome 97.0.4692.71ではなぜか、作ったチェックリストを削除できませんでした。(ゴミ箱アイコンをクリックしても何も反応しない)試しに、Edge 97.0.1072.62 で同じことをしたらできたので、JavaScriptの動きの問題のようです。。。うーん。