DebianでRedmine 1.3.2から2.0に更新する

さくらのVPS 512からさくらのVPS 2Gに移行していろいろ作業している間に Redmineは1.4.xがリリースされ、さらに Rails3向けのRedmine 2.0がリリースされた。

取り残されないうちにRedmine 2.0に更新する。Nginx+Passengerで動かしているがほとんどの作業はコマンドラインからでウェブサーバの違いが手順に影響することはあまりない。

本家サイトの手順にそっていく
http://www.redmine.org/projects/redmine/wiki/RedmineUpgrade

なおCentOS版の更新手順はredmine.jpで公開されている
http://blog.redmine.jp/articles/redmine-2_0-installation_centos/

Step 1 – Check requirements

Redmine 1.3.2の環境でRubyは1.8.7のみ、Railsは 2.3.14、gemは古いという状態。

一方、Redmine 2.0はRubyは1.8.7, 1.9.2, 1.9.3, jruby-1.6.7、Railsは3.2.3が必要。他のパッケージが記載されていないのでよく読んでみると、Redmine 1.4からBundlerに対応し、依存パッケージbundle installでセットアップできるようになったようだ。

さて今回はいろいろあって(後述)、Ruby 1.8.7を継続して使うことにした。Redmineの依存パッケージをインストールしていく。

su
PATH="$PATH:/var/lib/gems/1.8/bin"
gem install bundler
cd /path/to/redmine
bundle install --without development test

gemのバイナリのパスが通してないので面倒なことをしている。

RMagickの依存ライブラリのインストール

RMagickのインストールに失敗したので補足しておく。いままでRMagickはオプションだったし、別に要らないと思ってインストールしていなかった。しかし、bundle installの途中で失敗してストップしてしまい、withoutするのも癪なのでRMagickをインストールしてみる。

apt-cache search magick でそれらしいパッケージを検索し、以下のコマンドを実行。

apt-get install imagemagick
apt-get install libmagickcore-dev
apt-get install libmagickwand-dev

正直なところ3回実行した。最初にCan't install RMagick 2.13.1. Can't find Magick-configというエラーだったので薄々開発モジュールが要りそうだと思っていてimagemagickをインストールしてもMagick-configは入らなかったので続けてlibmagickcore-devをインストール。しかしそれでも Can't install RMagick 2.13.1. Can't find MagickWand.h. というエラーがでたので libmagickwand-dev をインストール。これでRMagickはインストールできた。

Step 2 – Backup

MySQLデータベースだけ。ここからはrootではなく通常ユーザで実行。

mysqldump -u redmine -p redmine > ~/redmine.dump.sql

Step 3 – Perform the upgrade

gitで管理しているので2.0のローカルブランチを作成する。

cd /path/to/redmine
git status
git checkout master
git pull
git pull --tags
git checkout -b redmine/2.0.0 2.0.0

Step 4 – Update the database

mv vendor/plugins/* plugins/ 
rm  config/initializers/session_store.rb
rake generate_secret_token
rake db:migrate RAILS_ENV="production"
rake redmine:plugins:migrate RAILS_ENV=production

1行目について
プラグインのディレクトリが変更されたらしい。(プラグインを使っていなかったので未検証)

2,3行目について
Redmine 1.4からsessionまわりが変わったらしいのだが

rake db:migrate RAILS_ENV=”production”
Please remove config/initializers/session_store.rb and run rake generate_secret_token.

と怒られたので従う。

5行目について

rake db:migrate_plugins RAILS_ENV=production
Note: The rake task db:migrate_plugins has been deprecated, please use the replacement version redmine:plugins:migrate

ということでdb:migrate_pluginsはredmine:plugins:migrateに置き換わった。

プラグインを入れてなかったのでRedmine 2.0とプラグインの互換性についてはなんとも言えない。自作テーマはRedmine 2.0でも問題なさそうだ。

undefined method `log_path’

データベースのマイグレーションを実行しようとすると以下のようなエラーが表示された。

rake db:migrate RAILS_ENV="production"
rake aborted!
undefined method `log_path' for #<Rails::Application::Configuration:0x7f0a75721448>

Configクラスにlog_pathがないので怒られている模様。config/additional_environment.rbに記載していたログのカスタマイズのコードが該当していた。ドキュメントのまま記述していいたのだけど・・・とりあえずコメントアウト。

config/additional_environment.rb
#config.logger = Logger.new(config.log_path)
#config.logger.level = Logger::WARN

本家サイトでも報告されているのでそのうち修正されるか、回避策が提示されるだろう。それまではデフォルトの設定でいく。
undefined method ‘log_path’
install redmine 2.0, when rake generate_secret_token, an error appear..

Step 5 – Clean up

rake tmp:cache:clear
rake tmp:sessions:clear
sudo service nginx restart

Redmineが無事表示できたら、ログインして管理 > 情報からバージョンを確認しておく。
次に 管理 > ルールと権限から新しい権限のチェック。

管理者にて
「チケットをプライベートに設定」
「自分のチケットをプライベートに設定」
「関連するチケットの管理」
チェックが入っていなかった。いつから増えたのかは不明。

Ruby 1.9系のインストール

移行を諦めたRuby 1.9の話。

Debianは1.8系がruby1.8、1.9系がruby1.9.1をそれぞれapt-get installでインストールできる。もともとruby1.9だったのだが問題があってパッケージ名がruby1.9.1になったようで混乱する。apt-cache show ruby1.9.1で以下のように表示される。

Package: ruby1.9.1
Version: 1.9.3.0-2.1

しかし実際いれてみて ruby1.9.1 -vとすると ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] で1.9.3にならなかった。。

sudo apt-get install ruby1.9.1 ruby1.9.1-dev
# /usr/bin/gem is already managed by gem
# gemは別にmasterで管理されてるよと怒られたので削除
sudo update-alternatives --remove-all gem
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.8 120\
  --slave /usr/bin/irb ruby-irb /usr/bin/irb1.8\
  --slave /usr/bin/gem ruby-gems /usr/bin/gem1.8 
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 150\
  --slave /usr/bin/irb ruby-irb /usr/bin/irb1.9.1\
  --slave /usr/bin/gem ruby-gems /usr/bin/gem1.9.1\
  --slave /usr/bin/rake ruby-rake /usr/bin/rake1.9.1
sudo update-alternatives --config ruby

一応ruby1.9.1には切り替えられるようにはしたが、最新版を使うならRVMから入れた方が良いような気もしている。いずれにせよRedmine以外Rubyアプリケーションは動かしていないので一旦保留にした。