Redmine 0.8.4 -> trunk (0.9.x) への移行メモ

社内のRedmineを0.8.4リリース版から0.9.xベースのtrunk(開発版)へ移行しました。結構はまったのでメモ。なお、Windows 2003サーバー上での運用です。
先日のRedmine勉強会で「全プロジェクトを網羅するカレンダーとかガントチャートが出力できないのが悩み*1」みたいな事を発表中に漏らしたら、懇親会で「全プロジェクトを包含する親プロジェクト作ったら?」とのアドバイスがあり、さっそくトライしたのですが…

@kirara_397  Redmineでエラー。A project with subprojects can't be a subproject そ、そんなー(泣(2009-06-15 09:22:02) link
@kirara_397  Redmineのプロジェクト構成は2層までらしい… orz(2009-06-15 09:23:18) link
@youhei  @kirara_397 trunk だと制限なしになってますよ(2009-06-15 09:24:21) link
@kirara_397  @youhei mjd!感謝です。試してみます。(2009-06-15 09:36:30) link
@youhei  @kirara_397 これっすね http://www.redmine.org/issues/594(2009-06-15 10:20:43) link
@kirara_397  @youhei 4ヶ月前かー。ありがとうございます。(2009-06-15 10:34:50) link
ということで、@youheiさんからのナイスな情報を元に、社内のRedmineを0.8.4 stableからtrunk (0.9.x) へアップグレードを試みました。以前はずっとtrunkを追っていたのですが、svn updateでどうしても取得できない時があり、それ以降Rubyforgeのリリース版を落とすようになっていました。
で、とりあえず

svn checkout http://redmine.rubyforge.org/svn/trunk/
rake db:migrate RAILS_ENV="production"

とかやったわけですが、なんかエラーになる(ログ失念)。調べてみると、現在のtrunkではRailsの要求バージョンが2.2.2に上がっていました。さらに前提条件としてRubyGems 1.3.1、Rake 0.8.3以上にしておく必要があるらしい(Installing Redmine)。ちょっと面倒ですね。
で、次にRubyGemsをアップデートしようとしたら、

gem update --system
Updating RubyGems
Updating rubygems-update
・
・
ERROR:  While executing gem ... (NameError)
    undefined local variable or method `remote_gemspecs' for #

何ィ。…ググって調べて(gem 動かない… - 仄かに輝く)、

gem install rubygems-update
Successfully installed rubygems-update-1.3.4
update_rubygems

で成功。次にRails 2.2.2のインストール。

gem install rails -v=2.2.2
Successfully installed rake-0.8.7
Successfully installed activesupport-2.2.2
Successfully installed activerecord-2.2.2
Successfully installed actionpack-2.2.2
Successfully installed actionmailer-2.2.2
Successfully installed activeresource-2.2.2
Successfully installed rails-2.2.2
7 gems installed

で成功。rake-0.8.7も入った。最後に

rake rails:update
rake db:migrate RAILS_ENV="production"

を実行して、Redmineサービスを再起動。これでRedmineにアクセスしてみる。
…なんと500 Internal Server Error
log/production.log を見ると

  Status: 500 Internal Server Error
  A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session = { :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb

またググって([rails][redmine]rails2.0でredmineを動かすときにはまったこと)、config/environment.rb の末尾に下記のように加筆。丁寧なログを吐いてくれるのが救い。

Rails::Initializer.run do |config|
  (中略)
  # Mon Jun 15 14:33:40 +0900 2009 Status: 500 Internal Server Error
  config.action_controller.session = { :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" }
end

これでようやく最新版のRedmineに移行できました!

良くなった点

  • 3層以上のプロジェクト構成が可能になった
  • 全プロジェクトを包含するカレンダー・ガントチャートが生成可能になった(目的達成!)
  • デフォルトの日本語化が進んでいる

変わらなかった点

  • PDFの日本語文字化け(config/locales/ja.yml で general_pdf_encoding: SJIS と修正しても直らない?)

その他

補足:Rails 2.3.2の場合

単純に gem update rails するとRails最新版の2.3.2が入りますが、その場合の挙動:

rake rails:update
Missing the Rails 2.2.2 gem. Please `gem install -v=2.2.2 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

Rails 2.2.2が必要なのに無いよ。2.2.2をインストールするか、config/environment.rbのRAILS_GEM_VERSIONを書き換えるかコメントアウトしてよ」と言われます。RAILS_GEM_VERSIONの指定は2.2.2です。
で、RAILS_GEM_VERSIONを2.3.2に書き換えてみたら、

rake rails:update
D:/Redmine/app/controllers/application.rb has been renamed to D:/Redmine/app/con
trollers/application_controller.rb, update your SCM as necessary
rake db:migrate RAILS_ENV="production"

ファイルをリネームされたりしたけど一応通った。けどRedmineにはアクセスできませんでした。謎。
面倒なので2.2.2に設定に戻して運用することにしました。ただしRails2.2.2と2.3.2の併存は可能みたいです。

以上

一応目的は達成できましたが、Redmineのアップグレードは毎回一筋縄ではいかないのが悩みどころ。でも調べればなんとかなるのは良いところ。
諸々の依存問題はgem一発で解消できるようになるといいなあ。つまりRedmineのgem入りを希望ですよ。

*1:追記:上部メニュー「プロジェクト」→「チケットを全て見る」→右の方「カレンダー」か「ガントチャート」を選択 で出力できましたorz