argius note

プログラミング関連

Bitnami版 Redmine v3.2.0をインストールして、v1.1.1からデータを移行してみました

あけましておめでとうございます。今年もよろしくお願いいたします。

今年初の投稿は、さっそく全く需要が無さそうなネタになりました。ご了承ください。


さて、以前、Redmine 1.1.1をインストールしました。

今回は、ソースからビルドしようと思いましたが、思いのほかRails環境の壁が厚かったため、前回と同様に、Bitnamiさんのインストーラーでインストールしました。

あ、でも少しだけRails環境を触ったので思わず勉強になりました。


下記リンクは、一応参考にしたページです。


アップグレードについては、ちょっと分かりにくいですが、以下のページも参照してみてください。




凡例

  • $REDMINE_HOME: Redmineがインストールされている場所。特に環境変数に設定する必要はありません。
    • 旧環境: /Applications/redmine-1.1.1-0
    • 新環境: /Applications/redmine-3.2.0-0

環境

インストール

下記ページから、OS XRedmine 3.2.0-0 (64-bit)のインストーラーをダウンロードします。

インストールオプションで、Redmineだけ入れました。ApacheMySQLがインストールされましたが、SVNとかは入れませんでした。

また、インストール時に各サーバーのポート番号を設定できますが、私の環境では、既にApacheMySQLがインストールされていて、他にもポートが使用済みなので、ポート番号をそれぞれ8081,3307にしています。

特に問題なくインストールできました。


インストールすると、Launchpadに下記のアイコンが出てきます。
実際はグループになっていないです。後からグループにしました。

LaunchpadのBitnami Redmine関連のツール

f:id:argius:20160103135526p:plain


"manager-osx"と名前がついているアイコンをクリックすると、"Application Manager"が起動します。

ここで、ApacheMySQLの起動・停止が行えます。

Bitnami Redmine Application Managerのサーバー管理タブ

f:id:argius:20160103142741p:plain



添付ファイルデータ移行

先に、添付ファイルの移行を済ませておきます。

旧環境の$REDMINE_HOME/apps/redmine/htdocs/filesのファイルを、新環境の同じ場所にコピーします。
delete.meはKeepファイル*1なので移動しなくて良いです。

これだけです。添付ファイルのメタ情報はDBにあります。


DBデータ移行

旧環境でmysqldumpでエクスポートしたSQLを、新環境に取り込みます。
※下記の(password)の部分は、実際にはRedmineが使うMySQLのパスワードを指定します。このパスワードは、Redmineが載っているRailsのDB設定ファイルdatabase.yml$REDMINE_HOME/apps/redmine/htdocs/config/database.yml)に書かれています。

  • 旧環境でエクスポート
$ /Applications/redmine-1.1.1-0/mysql/bin/mysqldump --user=bitnami --password=(password) \
  --all-databases --default-character-set=binary > dump.sql

ここでひとつ罠があったのですが、--default-character-set=binaryを付けないとLatin1でエクスポートされてしまいました。utf8では上手く行きませんでした。

--default-character-set=binaryを付ければ、データ自体はUTF-8で出力されましたが、まだ罠が残っていて、CREATE TABLE文にDEFAULT CHARSET=latin1というのが出力されています。
こちらは手動で、すべてのテーブルのDEFAULT CHARSET=latin1の箇所を、DEFAULT CHARSET=utf8に修正しました。


Latin1になってしまうのは、Redmine v1.1.1のmy.cnfcharacter-setに関する設定がありませんでしたので、そのせいかもしれません。


上記の修正を行ったあとで、インポートします。

  • 新環境でインポート
$ /Applications/redmine-3.2.0-0/mysql/bin/mysql -u root -p bitnami_redmine < dump.sql


これでデータ移行はできました。

動かしてみると、さっそくエラーが出ました。
ログを見てみましょう。
アプリケーションのログは、/Applications/redmine-3.2.0-0/apps/redmine/htdocs/log/production.logを参照します。

どうやら、テーブルが無かったり、列が足りなかったりするみたいです。
詳細は細かくなりすぎるので省きます。



次に、DBマイグレーションを試みました。


DBマイグレーション

DBマイグレーションを行うには、以下のrakeコマンドを実行します。プラグインのも合わせて行います。
bundlerというツールをインストールしていなければ、bundle execを省いて、rakeで直接でも良いかもです。

$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production

これでマイグレーションをしようとすると、

$ export PATH=$PATH:/Applications/redmine-3.2.0-0/mysql/bin/
$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/redmine-3.2.0-0/mysql/lib/
$ rake db:migrate RAILS_ENV=production
rake aborted!
LoadError: dlopen(/Applications/redmine-3.2.0-0/apps/redmine/htdocs/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.14/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Applications/redmine-3.2.0-0/apps/redmine/htdocs/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.14/lib/mysql2/mysql2.bundle
  Reason: unsafe use of relative rpath libmysqlclient.18.dylib in /Applications/redmine-3.2.0-0/apps/redmine/htdocs/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.14/lib/mysql2/mysql2.bundle with restricted binary - /Applications/redmine-3.2.0-0/apps/redmine/htdocs/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.14/lib/mysql2/mysql2.bundle
/Applications/redmine-3.2.0-0/apps/redmine/htdocs/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `require'
(以下略)



というエラーが出ます。これは、El Capitanから搭載された新セキュリティーシステム(SIP: System Integrity Protection)のせいで、ライブラリーを読み込むことができないからのようです。
install-name-toolというのも試しましたが、上手くいきませんでした。ちゃんと確認していませんが、SIPが保護するディレクトリー以外だったら上手くいくのかも知れません。

今回は、ここだけSIPを無効にして*2マイグレーションを行いました。
DBマイグレーションだけが上手く行かないので、マイグレーションが終わったら、SIPは元に戻します。


再び、rake db:migrateすると、今度はSQLのエラーが出ました。
Mysql2::Error: Table 'queries_roles' already exists: CREATE TABLE ...となっているので、既にテーブルが存在しているとダメみたいです。

ちょっと強引ですが、エラーが出る下記のテーブルをdropします。

もし旧環境のデータが残っていたら、手動でデータ復元を試みてください。私は特に復元しませんでした。

  • 削除するテーブル一覧
changeset_parents
queries_roles
custom_fields_roles
email_addresses
roles_managed_roles
imports
import_items
custom_field_enumerations


そして、もう一度rake db:migrateします。今度は上手く行くはずです。
実はここでもう一度別のエラーが出たのですが、やり直したら出なかったので、そこは飛ばします。


さっそくRedmineを画面から動かしてみますが、またエラーが出ます。
ログには、'users.mail' in 'field list'(以下略)と出力されています。
users表に、mailという項目が無いためのようです。

db/migrate/20150113213922_remove_users_mail.rbというマイグレーションスクリプトがあるようで、これで消されてしまうのでしょうか?

とりあえず、alter table users add mail varchar(60) NOT NULL DEFAULT '';を流しておきます。


今度こそ、動くようになりました!


今のところはとりあえず使えていますが、完全ではないかもしれませんので、ご注意ください。

特に、プラグイン辺りは分かりません。悪しからず。


(おわり)

*1:VCSやアーカイブで空のディレクトリーが作れない場合に置くファイル。.gitkeepだったり、.keepだったり。正式名称は知らない。

*2:無効にする手順はググってください。