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 | アップグレード)
- アーカイブをダウンロードし利用している場合
- Subversion リポジトリから、ソースコードをチェックアウトして利用している場合
バージョンアップに必要な手順
大まかにまとめるとこんな感じで、この順番ならきれいにできたかなーという感じです。実際は結構泥臭い作業になったりしてました。
OS は CentOS 5.4、DB は SQLite3、Webサーバは Apache を利用しています。
- RubyForge: Redmine: ファイルリスト から、Redmine 0.9.0 のアーカイブをダウンロード
- 動いている Redmine のサービスを停止
- 0.8.7 のバックアップを取得
- 0.9.0 をインストールする場所で展開
- シンボリックリンクの設定(Apache で設定をしているので、0.8.7 のディレクトリから 0.9.0 のディレクトリを参照するように変更。必要がなければやらなくても OK。)
- データベースへの接続情報(config/database.yml)をコピー
- email の設定情報(config/email.yml)をコピー
- 添付ファイルの利用をしていた場合は、files ディレクトリ以下を全てコピー
- DB のデータファイル(db/redmine.db)をコピー
- DB を更新
- プラグインをインストールしていた場合は、vendor/plugins/ 以下に、インストールしたプラグインのディレクトリを丸ごとコピー
- DB の更新が必要なプラグインの場合は、DB を更新
- Apache の再起動
バージョンアップしてみる
実際にやった手順を、はまった点を含めて書いておきます。
- Redmine のサービスを停止
- Redmine 0.8.7(/usr/loca/redmine-0.8.7)を適当な場所にバックアップ
- /usr/local/tmp というディレクトリを作って、そこにおく
- Redmine 0.9.0 のアーカイブを /usr/local におき、展開
[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。)