2013-03-07

Redmine 2 系へのアップグレード方法

古い Redmine (< 2.0) を最新の Redmine にアップグレードするので、メモ。今回、ぼくは開発版をインストールした。2013-03-07 現在、Redmine の最新版は 2.2.3 (2013-02-12 リリース)。開発版をインストールする場合でも、問題はないはず。

参考ドキュメント

開発版は公式の git mirror から頂く。

アップグレード手順は以下のページを参照した。

必須条件

アップグレード必須条件を書いておく (PostgreSQL や SQLite3 を使ってる人は、「Redmineのインストール | Redmine.JP」を参照のこと)。

  • Ruby 1.8.7, 1.9.2, 1.9.3
  • RubyGems <= 1.8
  • Rails 3.2.12
  • MySQL 5.0 以上

Ruby 2.0 には対応していない。各アプリケーションのバージョン・チェック方法は以下の通り:

$ ruby --version
$ gem --version
$ gem list | grep rails
$ mysql --version

必要に応じてアップデートを行なわれたし。

データのバックアップ

以降、旧 Redmine は /var/redmine/ 以下にインストールしたとして話を進める。バックアップ先は ~/redmine-bakups。

$ mkdir ~/redmine-backups
files ディレクトリーのバックアップ

Redmine にアップロードしたファイルは、全て files ディレクトリー以下に保存されている。

$ rsync -a /var/redmine/files/ ~/redmine-backups/files
MySQL DB のバックアップ

mysqldump コマンドを使う。

$ mkdir -p ~/redmine-backups/db
$ /usr/bin/mysqldump -u USER -pPASSWORD REDMINE_DB | gzip > ~/redmine-backups/db/redmine_`date +%y_%m_%d`.gz

REDMINE_DB の名前は /var/redmine/config/database.yml の中を見れば確認できる。

アップグレード作業

Redmine の入手

安定版を使う人はDownloadページから最新版を入手して解凍されたし。ぼくは開発版を git から取って来る。

$ cd /var
$ git clone git://github.com/redmine/redmine.git redmine-dev

redmine-dev というディレクトリーに clone。既存の redmine ディレクトリー (今、動いているバージョン) を上書きしちゃわないように。

Redmine の設定
  1. 旧い config/dababase.yml をコピー
  2. 旧い config/configuration.yml をコピー (ver. 1.2.0 より前からアップグレードする時は config/configuration.yml.example を config/configuration.yml にコピーした上で旧 config/email.yml の内容をコピーする)
  3. files ディレクトリー以下をバックアップから復帰
  4. プラグインのコピー (これは後回しの方が安全かな?)
  5. rake generate_secret_token で config/initializers/secret_token.rb を作る
  6. テーマのコピー (これも後回しで良いかな?)

実作業は次の通り:

$ cd /var/redmine-dev/config
$ cp -p ../../redmine/config/database.yml ./
$ cp -p configuration.yml.example configuration.yml
$ cat ../../redmine/config/email.yml >> configuration.yml
$ cd ..
$ rsync -a ~/redmine-backups/files/* files
$ rake generate_secrete_token
$ ls config/initializers/secret_token.rb
config/initializers/secret_token.rb

トラブル・トラブル・トラブル

実は rake generate_secrete_toke する所でエラーになった。

 rake aborted!
no such file to load -- bundler/setup

bundler が必要らしいけれど、インストールされていない。インストールしようとしたら、gem のバージョンが古い (bundler は gem 1.3.6 以上) という。そんなわけで gem をアップデートして bundler をインストール。

$ sudo gem1.8 install rubygems-update -v 1.3.6
$ sudo update-rubygems
$ sudo gem1.8 install bundler

旧い Redmine が稼動中なので、gem をシステム・インストールするのは怖い。もしかすると、動かなくなるかも。bundler は --path オプションでローカルにファイルをインストールできる。推奨とされる ./vendor/bundle 以下にインストールすることにした:

$ cd /var/redmine-dev
$ bundle install --path vendor/bundle

しかし、ImageMagick 系でエラー。

checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in (後略)

Magick-config がないという。ImageMagick 系のパッケージをインストール:

$ sudo apt-get install graphicsmagick-libmagick-dev-compat 

再度、bundle コマンド実行。

checking for wand/MagickWand.h... no

お次は wand/MagickWand.h がないという。libmagickwand-dev をインストール。

$ sudo apt-get install libmagickwand-dev

さあ、どうだ!!

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.0.3)
Using i18n (0.6.4)
Using multi_json (1.6.1)
Using activesupport (3.2.12)
Using builder (3.0.0)
Using activemodel (3.2.12)
Using erubis (2.7.0)
Using journey (1.0.4)
Using rack (1.4.5)
Using rack-cache (1.2)
Using rack-test (0.6.2)
Using hike (1.2.1)
Using tilt (1.3.4)
Using sprockets (2.2.2)
Using actionpack (3.2.12)
Using mime-types (1.21)
Using polyglot (0.3.3)
Using treetop (1.4.12)
Using mail (2.4.4)
Using actionmailer (3.2.12)
Using arel (3.0.2)
Using tzinfo (0.3.36)
Using activerecord (3.2.12)
Using activeresource (3.2.12)
Using metaclass (0.0.1)
Using mocha (0.10.5)
Using bourne (1.1.2)
Using bundler (1.3.1)
Using nokogiri (1.5.6)
Using ffi (1.4.0)
Using childprocess (0.3.9)
Using rubyzip (0.9.9)
Using websocket (1.0.7)
Using selenium-webdriver (2.31.0)
Using xpath (1.0.0)
Using capybara (2.0.2)
Using coderay (1.0.9)
Using fastercsv (1.5.5)
Using rack-ssl (1.3.3)
Using json (1.7.7)
Using rdoc (3.12.2)
Using thor (0.17.0)
Using railties (3.2.12)
Using jquery-rails (2.0.3)
Using mysql (2.8.1)
Using net-ldap (0.3.1)
Using ruby-openid (2.1.8)
Using rack-openid (1.3.1)
Using rails (3.2.12)
Installing rmagick (2.13.2)
Installing shoulda-context (1.0.2)
Installing shoulda-matchers (1.4.2)
Installing shoulda (3.3.2)
Installing yard (0.8.5.2)
Your bundle is complete! It was installed into ./vendor/bundle

成功!!

rake をこのまま実行すると、システムの gems を使ってしまう。bundle exec を使うと、--path で指定・インストールした gems を使ってくれる。なのでこれからの作業は bundle exec 付きで実行。

$ bundle exec rake generate_secret_token
$ ls config/initializers/secret_token.rb
config/initializers/secret_token.rb

secret_token.rb が出来ていることを確認して一安心。

MySQL の設定

MySQL の初期設定を行なう。

ここからは、ローカルの gems を使うので bundle exec を付ける。システム・インストールした gems を使う人は、適宜 bundle exec を消して作業されたい。

$ bundle exec rake db:migrate RAILS_ENV=production
クリーンアップ

キャッシュとセッション・ファイルをクリアする。

$ bundle exec rake tmp:cache:clear
$ bundle exec rake tmp:sessions:clear
パーミッションの変更

Apache などのウェブ・サーバーがディレクトリーにアクセスできるようにパーミッションを変更。

$ sudo chown -R redmine:redmine files log tmp
$ sudo chmod -R 755 files log tmp
確認

以上で Redmine 側の設定はおしまい。心配症な方は WEBrick サーバーを起動してチェック。

$ ruby script/rails server webrick -e production

ぼくはやらなかったけどね。

おしまい

最後にアプリケーション・サーバー (Apache とか) を再起動して実行。

DB を壊しちゃった人は、バックアップから復帰して再挑戦?

$ mysql -u USER -pPASSWORD REDMINE_DB < ~/redmine-backups/db/redmine_YYYY_MM_DD.gz

古い Redmine からアップグレードしようとすると、rake db:migrate RAILS_ENV=production でエラーが出るかもしれない。その場合は Redmine 2.2.2 をダウンロードして上の記事を参考に rake db:migrate ... を実行。データベースを新しくしてから、もう一度最新の Redmine で rake db:migrate ... をかける。

No comments:

Post a Comment