しばたテックブログ

気分で書いている技術ブログです。

Redmine 3.4.2でrake redmine:migrate_from_tracをエラー無く動作させるためのパッチを書きました

タイトル通りです。

Trac LightningからRedmineへ移行するにあたり、公式?に用意されていた移行ツールがRedmine 3.4.2ではエラーが出て動かなかったので、とりあえずエラー無く動作させるパッチを書いてみました。

Redmine 3.4.2でrake redmine:migrate_from_tracをエラー無く動作させるためのパッチ

パッチはGistに上げています。

Redmine 3.4.2でrake redmine:migrate_from_tracをエラー無く動作させるためのパッチ

gist.github.com

パッチの詳細や使い方についてはコメントに書いてあります。

Tracからのデータ移行に関して

RedmineでTracからデータ移行をするにはrake redmine:migrate_from_tracコマンドを使います。
だだ、このコマンドはTrac 0.11あたりを対象としており、作られた時期もかなり昔の様です。
残念ながら現在はコードのメンテナンスが行われておらず、何も考えず実行すると以下の様にエラーになってしまいます。

f:id:stknohg:20170930120311p:plain

出ているエラーはRedmine内部で使用しているRailsのバージョンが上がったことが原因であるため、本エントリのパッチは単純にエラーとなっている個所を新しいRailsに合わせた形に直しているだけとなります。

パッチを当てた後で再度rake redmine:migrate_from_tracを実行すると下図の様にウィザードを進めることができ、エラー無くデータを移行することができます。

f:id:stknohg:20170930120350p:plain

f:id:stknohg:20170930120411p:plain

注意事項

Ver.1.0以降の新しいTracだとデータの内部形式が異なる様で、本パッチを適用しても「データベースが見つからない」旨のエラーが出てしまいます。
新しいバージョンのTracからデータを移行したい場合は気合いでなんとかするしかない様です。

私の場合、Trac Lightningは新しいバージョンでもTrac 0.12だったので運よくパッチだけで済みました...

このツールに関して、エラーに関するIssueも幾つか出ているのですが、中の人たちの優先度も低い様で改善される見込みは無いと思われます。
(仮に私が中の人だとしても間違いなく優先度は低くするでしょうし、むしろこのツールをサクッと捨てると思います...)

また、Gistにも記載していますが、Trac 0.12のデータを移行する際は、

migrate_from_trac does not support trac 0.12

のパッチも適用しておく必要があります。
これはTrac 0.12から時刻データの内部保持形式が変わった(UnixTimeからマイクロ秒単位のUnixTimeに変更されている)のに対応するパッチとなっています。