Redmine 0.8.7 から 0.9.0 にバージョンアップする方法

会社で Redmine を使ってるんですが、バージョンが 0.8.7 で、Wiki の編集をしたときにメールが飛ばせなくて困ってました。
そこで、調べるてみたら 0.9.0 に関するページを発見。 Redmine 0.9のCHANGELOG (日本語訳付き) 0.9.0 では、Wiki 編集時にメールの送信ができるそうです。タイミングよく、1/9 に 0.9.0 がリリースされたので、バージョンアップをすることにしました。

バージョンアップの方法を選択

バージョンアップは、どうやってインストールしたかによって方法が異なります。
今回は、1 の方法でバージョンアップを行いました。(でもたぶん、2 で行うほうが簡単です。 参考:Redmine.JP | アップグレード

  1. アーカイブをダウンロードし利用している場合
  2. Subversion リポジトリから、ソースコードをチェックアウトして利用している場合

バージョンアップに必要な手順

大まかにまとめるとこんな感じで、この順番ならきれいにできたかなーという感じです。実際は結構泥臭い作業になったりしてました。
OS は CentOS 5.4、DB は SQLite3、Webサーバは Apache を利用しています。

  1. RubyForge: Redmine: ファイルリスト から、Redmine 0.9.0 のアーカイブをダウンロード
  2. 動いている Redmine のサービスを停止
  3. 0.8.7 のバックアップを取得
  4. 0.9.0 をインストールする場所で展開
  5. シンボリックリンクの設定(Apache で設定をしているので、0.8.7 のディレクトリから 0.9.0 のディレクトリを参照するように変更。必要がなければやらなくても OK。)
  6. データベースへの接続情報(config/database.yml)をコピー
  7. email の設定情報(config/email.yml)をコピー
  8. 添付ファイルの利用をしていた場合は、files ディレクトリ以下を全てコピー
  9. DB のデータファイル(db/redmine.db)をコピー
  10. DB を更新
  11. プラグインをインストールしていた場合は、vendor/plugins/ 以下に、インストールしたプラグインディレクトリを丸ごとコピー
  12. DB の更新が必要なプラグインの場合は、DB を更新
  13. Apache の再起動

バージョンアップしてみる

実際にやった手順を、はまった点を含めて書いておきます。

[root@localhost local]# service httpd stop
[root@localhost local]# mkdir tmp
[root@localhost local]# cp -rp redmine-0.8.7 tmp/
[root@localhost local]# tar zxvf redmine-0.9.0.tar.gz
[root@localhost local]# rm redmine
[root@localhost local]# ln -s redmine-0.9.0 redmine
  • 前バージョンの config/database.yml をコピー
  • 前バージョンの config/email.yml をコピー
  • 添付ファイルがあった場合はまるごとコピー(ただし、 delete.me は上書きしない)
  • 前バージョンの db/redmine.db をコピー
    • ここでは git で管理してるので上書きする
[root@localhost local]# cp -p redmine-0.8.7/config/database.yml redmine-0.9.0/config/
[root@localhost local]# cp -p redmine-0.8.7/config/email.yml redmine-0.9.0/config/
[root@localhost local]# cp -p redmine-0.8.7/files/* redmine-0.9.0/files
[root@localhost local]# cp -p redmine-0.8.7/db/redmine.db redmine-0.9.0/db/
  • /usr/local/redmine-0.9.0 へ移動し、DB を更新する
[root@localhost local]# cd redmine-0.9.0
[root@localhost redmine]# rake db:migrate RAILS_ENV="production"
(in /usr/local/redmine-0.9.0)
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

(See full trace by running task with --trace)


エラーがでました…。セッションがどうのとか言われています。書いてある通り、config/environment.rb に設定を追加してみます。既存のプロジェクトのRailsアップデート対応 【5】セッション情報を変える を参考に、:secret の値はランダムな文字列にするようにしました。その後、再度 DB を更新すると成功。

[root@localhost redmine]# vim config/environment.rb
## 下記を、config.action_controller.fragment_cache_store など、action_controllerの設定があるような場所に追記↓ ##
  chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
  secret = Array.new(60){chars[rand(chars.size)]}.join
  config.action_controller.session = { :key => "_hello_session", :secret => secret }

[root@localhost redmine]# rake db:migrate RAILS_ENV="production"
# サービスを起動
[root@localhost redmine]# service httpd start


マイグレーションは成功したので、サービスを起動してブラウザから確認してみると、Internal Server Error になっています。log/production.log には何も吐かれていないので、Apache のエラーログを見てみると、

Rails Error: Unable to access log file. Please ensure that /usr/local/redmine-0.9.0/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.

ActiveRecord::StatementInvalid (SQLite3::SQLException: unable to open database file: INSERT INTO "users" ("created_on", "hashed_password", "admin", "language", "lastname", "mail", "updated_on", "type", "firstname", "mail_notification", "login", "status", "identity_url", "last_login_on", "auth_source_id") VALUES('2010-01-12 17:08:46', '', 'f', '', 'Anonymous', '', '2010-01-12 17:08:46', 'AnonymousUser', '', 'f', '', 0, NULL, NULL, NULL)):


まず、アクセスログに権限が足りないとのこと。とりあえずアクセスログの権限を666 にします。

[root@localhost redmine]# chmod 666 log/production.log


次に、SQLite3 でファイルが開けないとか言われています。これも権限の問題でした。原因は、私がファイルを0.8.7 のものをコピーするとき、cp コマンドに -p オプションをつけたせいです(-p オプションをつけると、ファイルの権限やオーナーがすべてそのままコピーされます)。
普通ならこれで大丈夫だと思うのですが、0.8.7 のほうでなぜかオーナーが変わってしまっているファイルがありました。redmine.db もそのファイルに該当していたので、その関係で見れなくなっていたようです。とりあえずこちらも、redmine.db の権限を666 にします。

[root@localhost redmine]# chmod 666 db/redmine.db


また Internal Server Error でした。ただ、アクセスログに権限を与たので、Apache のログではなく、production.log を確認します。

ActiveRecord::StatementInvalid (SQLite3::SQLException: unable to open database file: INSERT INTO "users" ("created_on", "hashed_password", "admin", "language", "lastname", "mail", "updated_on", "type", "firstname", "mail_notification", "login", "status", "identity_url", "last_login_on", "auth_source_id") VALUES('2010-01-12 17:10:02', '', 'f', '', 


同じエラーです。db の方はディレクトリにも権限を与えないとだめみたいです。db ディレクトリの権限を 777 にします。

[root@localhost redmine]# chmod 777 db


これで OK かと思ったら、まだエラーが出ていたので、再度ログを確認します。

ActiveRecord::StatementInvalid (SQLite3::SQLException: no such table: member_roles: SELECT count(DISTINCT "members".id) AS count_all FROM "members"  LEFT OUTER JOIN "projects" ON "projects".id = "members".project_id  LEFT OUTER JOIN "member_roles" ON ("members"."id" = "member_roles"."member_id")  LEFT OUTER JOIN "roles" ON ("roles"."id" = "member_roles"."role_id") WHERE ("members".user_id = 2 AND (projects.status=1)) ):

テーブルが足りない…。プラグインを入れていたので、そのプラグインが作ったテーブルがないために出ているエラーっぽいです。

[root@localhost redmine]# cd vendor/plugins/
[root@localhost plugins]# cp -rp /usr/local/redmine-0.8.7/vendor/plugins/redmine_wiki_extensions ./
[root@localhost plugins]# cp -rp /usr/local/redmine-0.8.7/vendor/plugins/redmine_scrumdashboard ./
[root@localhost plugins]# cp -rp /usr/local/redmine-0.8.7/vendor/plugins/redmine_importer/ ./
[root@localhost redmine]# cd -
[root@localhost redmine]# rake db:migrate_plugins RAILS_ENV="production"
[root@localhost redmine]# rake db:migrate RAILS_ENV="production"
[root@localhost redmine]# service httpd restart


ようやくブラウザから確認できました。バージョンアップうまくいったみたいです。せっかくなので、Wiki の変更時にメールが飛ぶよう設定して、ちゃんと受信できるか確認もしました。よかったー。
(管理>設定>メール通知タブ>「Wikiページが追加されました」と「Wikiページが更新されました」欄にチェックをいれて保存すればOK。)