【解決済み】Redmineでエラー!チケットが消えた?!

院内ヘルプデスクMySQL, Redmine

病院内にRedmineという課題管理ツールを導入して1年以上経過していますが、業務に欠かせないツールになりつつあると思います。 そんな中、突然不可解な現象が起きてしまったので、今回はRedmineに起きた問題と、その解決方法を調査したのでご報告します。

現象

ある日、いつものように病院内に導入しているRedmineで作業報告を書いていたら、先輩職員が突然「チケットが消えた」と悲鳴をあげました。 そんなことはないと思ったのですが、書いていたチケットを自分のPCで見ると「500 internal error」と表示され、チケットが見れなくなっていました。 また、チケットの活動には作成したチケットが見れていますが、リンク先をたどるとやはり500エラーになってしまいました。

先輩が言うには特におかしいことはしていなくて、しいて言えばメールアドレスを書いたぐらいとのことでした。 自分でもチケットにメールアドレスを書いてみましたが、500エラーにはなりませんでした。

環境

Redmineサーバー側

  • Windows Server 2019
  • bitnami Redmine-4.0.4-3
  • MySQL
  • Ruby version 2.5.5-p157 (2019-03-15) [x64-mingw32]

Client側

  • Windows 10 64bit (1809)
  • Google Chrome(ver.74)

原因

チケットの履歴(変更記録)にメールアドレスが記述されておりそれが原因でした。メールアドレスだけ削除したり、メールアドレスの形式にしないで記述するとエラーになりませんでした。

なぜメールアドレスを記述するとエラーになるかは不明です。

ブラウザで該当のチケットを見ると以下のようなエラーがRedmineのログに残っていました。

上記のログを見ると、何となくRedmineのwiki記法であるtextile形式が関係がありそうな気がしました。しかし採用しているwiki記法はmarkdown方式なのでやっぱり不明です。

解消方法

Redmineをインストールしているサーバーに接続し、サーバ上でRedmineのDB(MySQL)に接続します。ちなみにWindowsのbitnami Redmineを使っている場合、パスワードを忘れても(インストールフォルダ)/apps/redmine/htdocs/config/database.yml にredmine用のユーザとパスワードが記録されています。

Redmineのチケットに関するテーブルは主に以下のようになっています。

テーブル名説明
issuesチケット
journalsチケットの変更記録
journal_details変更記録の詳細
attachments添付ファイルの情報

修正の流れとしては、対象のチケットをissuesで検索して、そのチケットの変更記録の内容をjournalsから探し出して、修正しました。

mysql >select * from issues where id = "(対象のチケット番号)"
mysql >select * from journals where journalized_id = "(対象のチケット番号)"
//チケット内にいくつか変更履歴があれば複数のレコードが表示されますので、対象のidを指定します。
mysql >select * from journals where id = "(対象のid)"
//修正箇所(今回は本文)の内容を書き換える
mysql >update journals set notes="xxxx(書き換えたい内容)" where id = "(対象のid)"

これでブラウザ上から対象のチケットを見てみると500エラーは消えて、無事にチケットが閲覧できるようになりました。

まとめ

Redmineはオープンソースで様々な人が修正を行っていて、エラーなどもすぐ解消されると思いますが、最新のバージョンではなかったため今回のようなバグが発生したのかと思います。

現行の環境を最新のアップデートするのは少し手間と調査が要りますので、これからRedmineを導入しようと考えている方は最新のバージョンを入れることをお勧めします。