Bitnami版 Redmine v3.2.0をインストールして、v1.1.1からデータを移行してみました
あけましておめでとうございます。今年もよろしくお願いいたします。
今年初の投稿は、さっそく全く需要が無さそうなネタになりました。ご了承ください。
さて、以前、Redmine 1.1.1をインストールしました。
今回は、ソースからビルドしようと思いましたが、思いのほかRails環境の壁が厚かったため、前回と同様に、Bitnamiさんのインストーラーでインストールしました。
あ、でも少しだけRails環境を触ったので思わず勉強になりました。
下記リンクは、一応参考にしたページです。
アップグレードについては、ちょっと分かりにくいですが、以下のページも参照してみてください。
- アップグレード — Redmine Guide 日本語訳
凡例
$REDMINE_HOME
: Redmineがインストールされている場所。特に環境変数に設定する必要はありません。- 旧環境:
/Applications/redmine-1.1.1-0
- 新環境:
/Applications/redmine-3.2.0-0
- 旧環境:
インストール
下記ページから、OS X 用 Redmine 3.2.0-0 (64-bit)のインストーラーをダウンロードします。
インストールオプションで、Redmineだけ入れました。ApacheとMySQLがインストールされましたが、SVNとかは入れませんでした。
また、インストール時に各サーバーのポート番号を設定できますが、私の環境では、既にApacheとMySQLがインストールされていて、他にもポートが使用済みなので、ポート番号をそれぞれ8081,3307にしています。
特に問題なくインストールできました。
インストールすると、Launchpadに下記のアイコンが出てきます。
実際はグループになっていないです。後からグループにしました。
"manager-osx"と名前がついているアイコンをクリックすると、"Application Manager"が起動します。
添付ファイルデータ移行
先に、添付ファイルの移行を済ませておきます。
旧環境の$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.cnf
にcharacter-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 '';
を流しておきます。
今度こそ、動くようになりました!
今のところはとりあえず使えていますが、完全ではないかもしれませんので、ご注意ください。
特に、プラグイン辺りは分かりません。悪しからず。
(おわり)