redmine0.9へのアップグレード失敗の対処法

前回のエントリーからちょっと間が空いたので、当サイトのアクセス解析からネタ探しをしてみます。

以前redmineアップグレード失敗談を掲載した都合か、それに関連するキーワードで当サイトに訪れる方が多いのですが意外と困ってる方が多いみたいに感じられるので、ちょっと整理してみましょう。

redmine0.8時代はマイナーバージョンアップが多かったので、アーキテクチャが同じだけに運用中のredmineディレクトリへ新バージョンのredmineをコピーしても問題なく動かせたんですが、redmine0.9はメジャーバージョンアップになるので、同じ感覚でアップグレードするとトラブります。

トラブった際の情報は大きく

  1. コンソール上でコマンド実行した際のエラーメッセージ
  2. Webサーバのerror_logの内容
  3. redmine/log/production.logの内容

で得られます。エラーメッセージをそのままキーワードにして検索される方も多いので、ここまでは多くの方が確認されてるようなのですが、以下ケース毎にまとめてみたいと思います。

マイグレーションできない

Could not find RubyGem rack (~> 1.0.1)

rake aborted!
Could not find RubyGem rack (~> 1.0.1)

とエラーメッセージが出ると思います。メッセージの通りRubyGems ManualsRubyGemにてrackなるモジュールが見つかんないということなので、rackをインストールすると次のステップに進めます。インストール方法は以前のエントリーでまとめていますので、そちらをご参照ください。

uninitialized constant ActionController::AbstractRequest

このエラーメッセージが出たということは、redmine0.8.xのディレクトリ内にredmine0.9のファイルを展開したのが原因とみて間違いないと思います。

このエラーは一応 redmine/vendor/plugins/actionwebservice を削除することで次のステップに進めるのですが、後々別のトラブルの元になるので素直にアップグレード作業をやり直すことをお勧めします。

Redmine.JPの記事にもある通り、新しいredmineを新しく作ったディレクトリに展開し、運用中のredmineから config/database.yml, config/email.yml, RAILS_ROOT/filesディレクトリ など、引き継ぐべきファイルを新しいredmineのディレクトリにコピーする手順を踏んでくださいね。

マイグレーションが正常終了してもredmineが起動しない

アップグレードの話ということで、passenger(mod_rails)との連携上の問題やそもそものWebサーバの設定の問題とかは今回はしません。

uninitialized constant ActionController::AbstractRequest

このエラーが出る場合、実はマイグレーションは正常終了してないのですが、経験上はエラーメッセージが出ないので安心してredmineにアクセスしようとすると、passengerを利用してる場合はpassengerがこのエラーメッセージを表示してくれる場合があります。

対処法はマイグレーションが上手く行かなかった場合の同エラーメッセージと同じです。なおマイグレーションは成功してませんので、マイグレーションからやり直してみてください。

それ以外のケース

MySQLを利用してる場合、RubyGemが管理するmysqlモジュールが原因でpassengerがエラーを教えてくれる場合があります。どんなエラーメッセージを返すのかなどは忘れちゃったのですが、RubyGemからmysqlをインストールし直してみてください。

一部ページで internal 500 error になる

確実にチケットの詳細ページで発生する

多分、uninitialized constant ActionController::AbstractRequest のエラーを独力で対処した結果です。 redmine/vendor/plugins/actionwebservice を削除した記憶があればほぼ間違いなくそうでしょう。

面倒ですが、アップグレード作業を最初からやり直すことをお勧めします。

チケット作成時やwiki作成時に時々発生する

Ruby on Rails2.3をRuby1.8.7-p248以降の組合わせの場合、UTF-8のセグメンテーション・エラーが発生するのが原因で時々 Internal Server Error が発生します。

関連チケットにSegmentation fault in Marshal.load in Rails’ ActiveSupport in 1.8.7-p248 onlyとあり、以前の私のエントリーでも1.8.7-p249でも発生するってことはないような感じですと書きましたが、Ruby1.8.7-p249でもやっぱり発生します。

このケースが発生する場合はRuby1.8.7-p174やruby1.8.6-p388辺りを再インストールした方が良いと思います。