Redmineを2.6から3.0に、ついでにRubyを2.1から2.2にバージョンアップしたお話

一度、掲題のバージョンアップ作業をやったことがあるけど、久しぶりになると時間がかかったのでここにメモを残すことに･･･

# 環境
* OS:Ubuntu12.04LTS
* Gitはapt-getでインストール&バージョンアップ
* Rubyはrbenvでインストール
* Redmineが使用するDBはMySQL(これもapt-getで)

# 本題
## rbenv
[rbenv](https://github.com/sstephenson/rbenv#readme)はGitでバージョンアップ

```
$cd ~/.rbenv
$git pull
```

[ruby-build](https://github.com/sstephenson/ruby-build#readme)もバージョンアップ

```
$cd ~/.rbenv/plugins/ruby-build
$git pull
$sudo ./install
```

## Ruby
Rubyをrbenvでバージョンアップ。

```
$rbenv install 2.2.2
```

rbenvへの引数(インストールできるバージョン番号)は以下のコマンドで確認できる。

```
$rbenv install -list
```

新しくRubyをインストールしたのでリハッシュする。全体で使用するバージョンを2.2にする。

```
$rbenv rehash
$rbenv global 2.2.2
```

## Redmine
[本家サイト](http://www.redmine.org/projects/redmine/wiki/RedmineUpgrade)を参考にRedmineをアップグレード！
### ステップ1　必須条件チェック
[対応OSや、Rubyのバージョン、DBのバージョン](http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements)はちゃんと見ておこうね。

### ステップ2　バックアップ
バックアップ対象は、アップロードされたファイルとDBだけらしい。
アップロードされたファイルは`files`ディレクトリにあるのでそれをコピーする。
私の場合、Redmineを`/usr/local/src/redmine/redmine-2.6`にインストールしているので、`/usr/local/src/redmine/redmine-2.6/files/`のこと。
しかし、まだファイルがアップロードされていなかったので、ここは省略。

続いて、DBのバックアップ。久しぶりの接続だったので、ユーザ名とパスワードは`config/database.yml`からカンニング。

```
$mysqldump -u <username> -p <redmine_database> | gzip > /path/to/backup/db/redmine_`date +%Y%m%d`.gz
```

### ステップ3　アップグレード実行
Redmineはアーカイブからインストールする方法と、Subversionからインストールする方法がある。今回は後者。`/usr/local/src/`にインストールしているのでroot権限で実行した。

```
$cd /usr/local/src/redmine
$sudo svn co https://svn.redmine.org/redmine/branches/3.0-stable redmine-3.0
```

以前のバージョンから設定ファイルをコピーする。

```
$sudo cp ../redmine-2.6/config/database.yml
$sudo cp ../redmine-2.6/config/configuration.yml
```

次に、bundleが必要になるので、gemでインストールしておく。
gemを追加したら、rbenvをリハッシュする。

```
$gem install bundle
$rbenv rehash
```

いよいよbundleを使う。
root権限でbundleを使用すると怒られるので、`redmine-3.0/`とその配下の所有者を現在のユーザに変更する。

```
$cd /usr/local/src/redmine/
$sudo chown -R <user>:<group> redmine-3.0
$cd redmine-3.0
$bundle install --without development test
```

もしImageMagickをインストールしていない場合は、withoutオプションに`rmagick`も指定する。

```
$bundle install --without development test rmagick
```

secret_tokenを作り直す。

```
$rm config/initializers/secret_token.rb
$bundle exec rake generate_secret_token
```

### ステップ4　DBアップデート
DBを新バージョン用に変更。

```
$bundle exec rake db:migrate RAILS_ENV=production
```

プラグインをインストールしていたら以下も実行する。
今回はプラグインを追加していないので省略。

```
$bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```

### ステップ5　お掃除
キャッシュとセッションを削除。

```
$bundle exec rake tmp:cache:clear tmp:sessions:clear RAILS_ENV=production
```

## Apacheとpassenger
Apacheは、`www-data`ユーザで起動されるので、所有者を変更する。
```
$cd /usr/local/src/redmine/
$sudo chown -R www-data:www-data redmine-3.0
```

Rubyのバージョンが変わったので、ApacheとRubyを連携するpassengerをインストールする。

```
$gem install passenger
```

Apache用のモジュールをビルドする。これに時間がかかる。

```
$passenger-install-apache2-module
```

ウィザードの内容に従って操作する。
はじめの選択肢の文字が化けていたら、`!`を入力する

Apacheの設定ファイルの内容が表示されるので、コピーして`/etc/apache2/conf.d/passenger.conf`に保存する。
新バージョンのRedmineのディレクトリを表示できるように`/etc/apache2/sites-enabled/001-redmine`を編集する。

Apacheを再起動する。
```
sudo service apache2 restart
```

## バージョン確認
再起動後、ブラウザからRedmineにアクセスし、管理者でログイン。
管理者メニューのInfomationを表示する。
各種バージョンが正しいことを確認する。

お疲れ様でした。