別サーバにあるTracからRedmineへデータを移行する手順
経緯
先日、開発用サーバに立ててあるBTS(バグ管理システム)ツール"Trac"のデータを
別のサーバに立ててある同様のBTSツール"Redmine"に移行する事になった。
Redmine公式の"他システムからの移行"ページによると、
tracからredmineへの移行を実行するスクリプトがあり、それを利用した移行手順が載っているが、
これは同一サーバ内にTracとRedmineが同居していることを前提とした手順なので、
別サーバに立ててある場合についての手順は載ってなかった。
先輩に訊いてみたところ、バグチケットの移行の例はあったものの、
Wikiを含めたデータを丸ごと移行した前例はないとの事だったので
今回調査してここに移行手順を載せることにする。
この手順では、以下の前提に則って書いてあるのであしからず。
- Unix系のOS(Linux,Macなど)でCUIを利用した作業ができること
- コマンドラインからのsshでサーバに接続できること
- Tracを利用した経験、Redmineを利用した経験があること
- Trac,Redmineのサーバが既にそれぞれ立ててあること
移行手順
1.tracがあるサーバにて
tracディレクトリを"tar.gz"で圧縮して、ユーザディレクトリに移動させる$ sudo su - #rootユーザに変更 $ cd /var/ $ ./stop_trac.sh #圧縮中に更新されないようにTracを止めておく $ tar -zcvf trac.tar.gz trac $ mv trac.tar.gz /home/[ユーザ]/
2.ローカルPCにて
tar.gzファイルをscpで持ってくる$ scp [ユーザ]@[tracがあるサーバ]:~/trac.tar.gz .
tar.gzファイルをredmineがあるサーバにscpで送る
$ scp trac.tar.gz [ユーザ]@[redmineがあるサーバ]:
3.Redmineがあるサーバにて
Redmineがあるサーバでtar.gzファイルを展開する$ cd /home/[ユーザ]/ $ tar -zxvf trac.tar.gz
もし失敗した時のためにRedmineのDBのバックアップをとっておく
#DBがmysqlの時 $ mysqldump -u[ユーザ名] redmine > redmine.dump2012XXXX
オプション設定。以下の条件が当てはまっていたら、それぞれに対応した※(後述)を実行する。
データ移行スクリプトを実行する
$ cd /var/www/[redmineのパス] $ sudo su - www-data #www-dataユーザに変更 $ mkdir files #実行する時に必要なディレクトリを作成 $ rake redmine:migrate_from_trac RAILS_ENV=“development” #実行後以下の問い合わせが来るのでそれぞれ入力する Trac directory []: #Tracが置いてあるパスを入力 Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite]: #Tracで使用したDBの種類を入力 Database encoding [UTF-8]: #DBの文字コードを入力(何も入力せずEnter押すだけでもOK) Target project identifier []: #Redmine上で使うプロジェクトの名称を入力 ↓ Trac directory []: /trac/home/[ユーザ]/trac/[プロジェクトのディレクトリ] Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite]:sqlite3 Database encoding [UTF-8]: Target project identifier []: [プロジェクト名]
入力すると処理が走って、数分経てば完了する。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
※1 Tracのバージョンが0.12の場合:
移行スクリプトは0.12をサポートしていない。
[参考URL: http://www.redmine.org/issues/6868 http://www.redmine.org/issues/5764 ]
なので、スクリプトファイルを一部修正しなければいけない。
1). スクリプトファイルを修正: $ sudo su - #rootユーザに変更 $ vi /var/www/[Redmineのパス]/lib/tasks/migrate_from_trac.rake 78 def fake(time) 79 @fake_diff = real_now - time ↓ time = 0 if time.nil? を追加 78 def fake(time) 79 time = 0 if time.nil? 80 @fake_diff = real_now - time 2). パッチファイルを当てる $ wget http://www.redmine.org/attachments/download/4049/migrate_from_trac.diff $ patch -p0 < migrate_from_trac.diff パッチを当てるファイル名の問い合わせに migrate_from_trac.rake を指定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
※2 TracのデータをSqlite3で格納していた場合:
Ruby用のSqlite3をインストールする
$ sudo gem install sqlite3-ruby
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
※3 RedmineのサーバのRubyバージョンをRVMで切り替えている場合:
RVMでバージョンを指定しないと、スクリプトを認識してくれないので指定する。
$ cd /var/www/[redmineのパス] $ sudo su - www-data $ rvm use 1.8.7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
FAQ 移行に関して出てくるありがちな疑問
Q1.TracのユーザがRedmineに登録されなかった。どうして?
A.Trac上でユーザが作成されていても、チケットの担当が割り振られていないとRedmine上にユーザは作成されない。
ユーザを移したい時はどこかしらのチケットに割り振るように。
Q2.TracとRedmineでユーザIDが重複したら、ユーザ情報(ログインパスワードなど)は上書きされちゃうの?
A.Redmine側のユーザ情報は保持される。Tracで受け持ってるチケットを引き継いでくれるので意外と便利。