いまさらだけどTracからRedmineに移行する(ユーザー名変換)


いまさらだけどTracからRedmineに移行する
こちらでの Trac と Redmine のユーザーが一致しない様な場合の対応。

Trac のユーザー管理

現行版?のスキーマ情報はソースコードだけの様だが、0.11, 0.12 に関しては、公式サイトの Trac Database Schema に ER 図がある。

Trac 自体はデータベース内でユーザーを管理せず、Web サーバー側から得た REMOTE_USER 環境変数 で処理させる仕組みである。

このため、

  • 都合によりユーザー名を変更
  • htpasswd でのローカルな BASIC 認証管理だったものを、LDAP/ActiveDirectory などへ認証方法を変え統合のため変更

などでユーザー名が変更された場合、古いチケットのユーザ名は古いままだったりする。

また、チケットのアサイン先なんかは適当に自由な文字列が入れられちゃったりする。全員担当で、"All" とか複数人をカンマ区切りで入れたりとかしても内部的にはただの TEXT になる。

Redmine/GitLab などへの移行時の問題

たとえば、既に動作しない Redmine 公式の移行方法1だとか、確認はしていないが TracBoat による GitLab への移行で上記の点が問題になるはず。

Redmine の migrate_from_trac の Rake タスクベースでは、この様な現在存在しないユーザーが新規追加されてしまうのでちょっと困りもの。

解決案

Trac 自体のユーザー情報を事前に整理する

  1. 一旦チケットなどのユーザーを抽出する
  2. ユーザー変換の置き換え情報を作る
  3. それを元にデータベース上のユーザーを置き換える

というのがありそう。

次のような感じで単一ユーザーにて試してみると大丈夫そうだった。

UPDATE ticket SET owner='john-lydon' WHERE owner='johnny-rotten';

成果物

ということで、上記の案の一連の作業を行うものをスクリプト化した。

これで Redmine への以降の場合ユーザーの問題もなんとかなりそう。


  1. こちらの修正パッチは前回記事および GitHub に掲載しました。redmine.org の Issue にあげたけど反応ないから、そのうち、もうシラネーヨ って書いて close しようかな。