アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

Redmine 2.2.0 から 2.3 へ更新

March 24, 2013開発Redmine

この間 Redmine 2.2.3 へ更新しようとして失敗という記事を書いた。その後、失敗の要因が判明して 2.3.0 への更新に成功。ついでにさくらのVPS を改めて使いはじめる 9 - Ruby、Redmine、Subversion の更新手順を補完するため改めて記事を書く。

調べてみたら現在のバージョンは 2.2.0 だったので 2.2.x 系から 2.3.x 系への更新となる。

更新の準備

Redmine 最新版を RubyForge からダウンロードする。ページを開くとバージョンごとのアーカイブへのリンクがあるので取得したい tar.gz イメージの URL をメモしておく。VPS の HOME ディレクトリへ tar.gz を取得・展開したら /var/lib/redmine-new へ移動。

$ cd
$ wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
$ tar zxvf redmine-2.3.0.tar.gz
$ rm -rf redmine-2.3.0.tar.gz
$ sudo mv redmine-2.3.0 /var/lib/redmine-new

/var/lib に現在の Redmine と最新版が併存していることを確認。それぞれ redmine、redmine-new というディレクトリになっていれば OK。

$ ls -l /var/lib
drwxrwxr-x  17 XXXX  XXXX  4096 12月 30 21:35 2012 redmine
drwxrwxr-x  16 XXXX  XXXX  4096  3月 20 05:32 2013 redmine-new

/var/lib/redmine/public 内に plugin_assets ディレクトリが存在しないと Redmine の管理画面の情報に表示される Plugin assetsディレクトリに書き込み可能 がエラーになるので作成しておく。

$ cd /var/lib/redmine-new/public
$ mkdir plugin_assets

現在の Redmine から最新版へ設定を引き継ぐ。必要なファイルを redmine から redmine-new へコピー。

$ cd /var/lib
$ cp redmine/config/database.yml redmine-new/config/database.yml
$ cp -r redmine/config/email.yml redmine-new/config/email.yml
$ cp -r redmine/files/ redmine-new/

もしプラグインやテーマを追加インストールしていたなら、それらもコピーしておく。重複するものが多いのでディレクトリ全体ではなく中身を個別にコピーしたほうが古いもので上書きする危険を避けられて安全。

たとえば私は A1Highrise というテーマを利用しているので以下のようにコピーしている。

$ cp -r redmine/public/themes/a1 redmine-new/public/themes/a1
$ cp -r redmine/public/themes/highrise_tabs redmine-new/public/themes/highrise_tabs

Redmine 2.0 からプラグインのディレクトリが vendor/plugins から Redmine 直下の plugins へ変更されているため移行元が 1.x 系の場合は注意すること。

最後に Redmine 2.3 から必須 (?) になった SQLite と PostgreSQL の開発用モジュールをインストールしておく。これらを利用しないとしてもなぜか bundle install でエラーが発生する。--without に postgresql や sqlite を指定しても参照されてしまうらしく、いまのところ回避方法は不明。

$ sudo yum install postgresql-devel.x86_64
$ sudo yum install sqlite-devel.x86_64

これにて準備完了。

Redmine 2.3.0 へ更新

更新にあたり現在の Redmine を非公開にする。このブログの「さくらのVPS を改めて」シリーズにそった手順で環境構築しているならシンボリック リンクを削除するだけでよい。

$ sudo rm -rf /var/www/html/projects

現在の Redmine と最新版のディレクトリをリネームして入れ替え。作業が完全に終了するまで現在の Redmine である redmine-old は削除しないこと。もし更新がどうしても成功しない場合は redmine を消して redmine-oldredmine へリネームしてシンボリック リンクを復活させれば元の状態へ戻せる。これは保険である。

$ cd /var/lib
$ sudo mv redmine redmine-old
$ sudo mv redmine-new redmine

Redmine 2.3 が現在の Redmine となったので環境構築してゆく。まずは Bundler で必要なモジュールを取得する。Enter your password ~ というメッセージが表示されたら sudo 実行時のパスワードを入力し Enter を押す。

$ cd /var/lib/redmine
$ bundle install --without development test
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Enter your password to install the bundled RubyGems to your system:
...中略
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

途中で Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. というエラーが発生するなら必須モジュール不足。yum などでインストールしてから再試行すること。私の環境では前述のように SQLite と PostgreSQL の開発用モジュールが不足していたので導入してから再試行したら成功した。

次に Redmine のセッションを管理する鍵を初期化し、データベースをマイグレートする。

$ cd /var/lib/redmine
$ rake generate_secret_token
$ rake db:migrate RAILS_ENV="production"
$ rake db:migrate:upgrade_plugin_migrations RAILS_ENV=production
$ rake db:migrate_plugins RAILS_ENV=production
$ rake tmp:cache:clear
$ rake tmp:sessions:clear

Redmine を再起動させるためインストール先の tmp ディレクトリ内に restart.txt という名でテキスト ファイルを作成する。中身は空でもよい。

このファイルに Web ブラウザー経由でアクセスすると Redmine が再起動されファイルは自動的に削除される。この仕組みは Apache など Web サーバーを再起動することなく Rails アプリのみ再起動するためのもの。テーマやプラグインを追加した時にそれを即時認識させるためにも利用できる。便利な機能だ。

$ cd /var/lib/redmine/tmp
$ touch restart.txt

シンボリック リンクを復活させる。

$ sudo ln -s /var/lib/redmine/public /var/www/html/projects

Web ブラウザーからさきほど作成した restart.txt にアクセスして Redmine を再起動。もしこの後に restart.txt が残っていたなら手動で削除しておく。最後に Redmine へログインして管理画面からバージョン情報を確認。

Redmine の情報画面

ばっちり。