gitリポジトリを使ってredmine 1.1から1.2に更新

添付ファイルの移動、パーミッションの変更などが抜けていたので修正(2011/8/17)

さくらのVPSに乗っけているRemineを1.1系から1.2.1に更新した。リポジトリブラウザにあったテキストファイルがようやく表示されるようになったようだ(今まではmime等の問題でファイルダウンロードになってしまっていた)

さて、もともとリビジョンの更新作業を簡単にするためにsubversionからインストールしていた。

http://www.redmine.org/projects/redmine/wiki/RedmineUpgrade を読むと svn update で更新できるとある。

が、俺はもうだまされないぞ。

バージョンによって必要とされる環境が異なるのでtrunkから入れるのは少々リスクがある。そのため各バージョンのbranchからインストールするような手順になっていたはず。

svn co http://redmine.rubyforge.org/svn/branches/1.1-stable redmine

と、1.1のブランチからインストールした場合、ここからsvn updateを唱えたところで1.2の変更が取得できるわけがない。

svnのchannelの変更とか忘れて思い出せないし、branchの切り替えはgitの方が楽。と思っていたらgitリポジトリが用意されていた。
http://www.redmine.org/projects/redmine/wiki/Download

Git (this is a not officially maintained mirror)
https://github.com/edavis10/redmine

各バージョンのタグがうってあるので、これでマイナーバージョンアップになろうがやる作業はtagからローカルbranchをチェックアウトするだけの簡単な手順になる。設定ファイルに互換があればもとに戻すのもローカルbranchの切り替えで戻せる。

というわけでsvnでインストールしたやつを一旦退避してgitで新規インストールすることにした。

mv redmine redmine.old
git clone git://github.com/edavis10/redmine.git redmine
cd redmine
git checkout -b redmine/1.2.1 1.2.1

これで”1.2.1″というタグからローカルbranch “redmine/1.2.1″を作成して切り替わる。あとは退避していた1.1のredmineからconfig/database.ymlなどをコピー。一つ注意事項があって1.2からはemail.ymlが廃止され、configuration.ymlが新規に追加されている。email.ymlに書いた設定自体は変わっていないようなのでconfiguration.yml.sampleからconfiguration.ymlにコピーし、

# specific configuration options for production environment
# that overrides the default ones
production:

あたりにemail.ymlに入れていた内容を書くとよいだろう。

1.2.xでもrubyのバージョンは1.8系だが、1.1からはrails, rackモジュールの更新が必要になっている。gemでインストールしておく。configを見るとバージョン指定で読み込んでいるので異なるバージョンのrailsが入っても問題ないはず。

gem install rails -v=2.3.11
gem install rack -v=1.1.0

あとはRedmineUpgradeの記載に沿って行く。

データベースが更新されるのでまず

mysqldump -u user -ppassword redmine > ~/redmine.dump.sql

などでバックアップをとっておこう。

rake db:migrate RAILS_ENV="production" 
rake db:migrate:upgrade_plugin_migrations RAILS_ENV=production
rake db:migrate_plugins RAILS_ENV=production
rake tmp:cache:clear
rake tmp:sessions:clear

しかし、

rake aborted!
A key is required to write a cookie containing the session data. Use config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase" } in config/environment.rb

というエラーが発生したので以下のコマンドを実行する。ちゃんと調べてないので必ず必要な作業なのかはよくわかっていない。

rake config/initializers/session_store.rb

添付ファイルを移動して、所有者などをウェブサーバのものに整えておく。(Redhat系だとwww-dataじゃなくapacheだったり)

rsync -av ../redmine.old/files/ ./files/ --exclude="delete.me" --exclude=".svn"
chown www-data:www-data files log tmp
chown www-data:www-data log/*.log
chown -R www-data:www-data public/plugin_assets

あとはapacheを再起動して終了。Debian/Ubuntuなら以下のように(Redhat系だと/etc/init.d/httpd restartだったりする)

/etc/init.d/apache2 restart

いまいち、fastcgiで動かしているはずなのにapacheの再起動しないと更新されなかったりするのがよくわかっていない。