ALMiniumをバージョンアップする

約2年前にRedmine×Gitの環境を構築するために、ALMiniumを利用しました。
さすがにそろそろ新しいバージョンを使いたくなってきたので、今回はALMiniumをバージョンアップします。

バージョンアップ元が仮想マシンなので、バージョンアップ先に新規の仮想マシンを用意して移行することにします。

バージョンアップ元(仮想マシン)

  • ALMinium : 2011/11/21版 (Redmine 1.2.2)
  • OS : Oracle Linux 6.1 (32bit)

バージョンアップ先(仮想マシン)

  • ALMinium : 2013/7/31版 (Redmine 2.3.1)
  • OS : CentOS 6.4 (64bit)


1. バージョンアップ元のバックアップ

まず、バージョンアップ元の仮想マシンから必要なデータをバックアップします。

1-1. Redmineのデータベースのバックアップ

mysqldumpコマンドを使用して、Redmineのデータベース(MySQL)のダンプファイルを取得します。

$ mysqldump -u alminium -p --default-character-set=latin1 alminium > alminium.dump

1-2. Redmineの添付ファイルのバックアップ

ALMiniumのRedmineの添付ファイルは、データベースではなく/opt/alminium/files/ 配下に格納されます。
このディレクトリ配下のファイルをすべてバックアップします。

$ tar czvf opt.alminium.files.tgz /opt/alminium/files/ 

1-3. ソースコードリポジトリのバックアップ

ALMiniumでは、GitやMercurial, Subversionのリポジトリはすべて/var/opt/alminium/に格納されます。
このディレクトリ配下のファイルをすべてバックアップします。

$ tar czvf var.opt.alminium.tgz /var/opt/alminium/ 

2. バージョンアップ先へのALMiniumのインストール

公式のインストール手順を参考に、ALMiniumをインストールします。

3. バージョンアップ先へのマイグレーション

3-1. ソースコードリポジトリの配置

バックアップ元で取得したソースコードリポジトリを移行して配置します。

$ tar -zxvf var.opt.alminium.tgz -C / 

3-2. Redmineの添付ファイルの配置

バックアップ元で取得したRedmineの添付ファイルを移行して配置します。

$ tar -zxvf opt.alminium.files.tgz -C / 

3-3. Redmineのデータベースのマイグレーション

バックアップ元で取得したデータベースのダンプファイルを移行してリストアします。

$ mysql -u alminium -p alminium < alminium.dump

ここで、データベースをマイグレーションします。

$ cd /opt/alminium
$ rake db:migrate RAILS_ENV="production" 

プラグインも併せてマイグレーションします。

$ rake redmine:plugins:migrate RAILS_ENV=production

これにてマイグレーション完了です。

4. バージョンアップの反映

4-1. キャッシュのクリア

キャッシュとセッションをクリアします。

$ rake tmp:cache:clear
$ rake tmp:sessions:clear

4-2. Apacheの再起動

$ service httpd restart

以上でバージョンアップが完了となります。


トラブルシュート:マイグレーション失敗

私の環境では、テーブル作成失敗を意味する下記のようなエラーが出ました。

 ==  CreateChangesetParents: migrating ========================================= -- create_table(:changeset_parents, {:id=>false})
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'changeset_parents' already exists: CREATE TABLE `changeset_parents` (`changeset_id` int(11) NOT NULL, `parent_id` int(11) NOT NULL) ENGINE=InnoDB/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/mysql2_adapter.rb:211:in `execute'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/schema_statements.rb:170:in `create_table'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:434:in `create_table'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:466:in `block in method_missing'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:438:in `block in say_with_time'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:438:in `say_with_time'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:458:in `method_missing'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:334:in `method_missing'
/opt/alminium/db/migrate/20110902000000_create_changeset_parents.rb:3:in `up'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:370:in `up'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `block (2 levels) in migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `block in migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:389:in `migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:528:in `migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:720:in `block (2 levels) in migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `call'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `ddl_transaction'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:719:in `block in migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `each'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:570:in `up'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/migration.rb:551:in `migrate'
/opt/alminium/vendor/bundler/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/railties/databases.rake:193:in `block (2 levels) in '
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
 

このようなエラーが出る場合、下記のように問題のテーブルを削除してしまいましょう。

$ mysql -u alminium -p alminium
mysql> drop table changeset_parents;
mysql> exit

下記のコマンドを再実行します。

$ rake db:migrate RAILS_ENV="production"

今度はうまくいきました。

トラブルシュート:Redmineの文字化け

私の環境では、Redmineの日本語文字列が文字化けしてしまったので、これに対処します。

まず、バックアップ元でMySQLの文字コードを確認します。

$ mysql -u alminium -p alminium
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

次に、バックアップ元で、ダンプをとりなおします。
このとき、文字コードを”latin1″とするのがミソです。

$ mysqldump -u alminium -p --default-character-set=latin1 alminium > alminium.dump

ダンプファイルを取得できたことを確認したら、ファイルの中身が文字化けしていないことを確認します。

$ less alminium.dump

ちなみに、私の環境では、他に下記の3パターンを試しましたが、生成されたダンプファイルはすべて文字化けしていました。

$ mysqldump -u alminium -p alminium > alminium.dump

 

$ mysqldump -u alminium -p --default-character-set=binary alminium > alminium.dump

 

$ mysqldump -u alminium -p --default-character-set=utf8 alminium > alminium.dump

ダンプファイル内には”latin1″が1箇所だけあったので、”utf8″に直します。

- /*!40101 SET NAMES latin1 */;

 

+ /*!40101 SET NAMES utf8 */;

次に、バックアップ先のMySQLの設定ファイル(/etc/my.cnf)を修正します。
ここでは、[mysqld] セクションに character-set-server=utf8 を、
[mysql] セクションに default-character-set=utf8 を追加します。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
+ character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

+ [mysql]
+ default-character-set=utf8

MySQLを再起動します。

$ service mysqld restart

my.cnfの設定が反映されていることを確認します。
ここでは、”latin1″が残っていないことを確認します。

$ mysql -u alminium -p alminium
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

以上が完了したら、データベースを再作成してリストアし、マイグレーションします。

$ mysql -u alminium -p -e "drop database alminium"
$ mysql -u alminium -p -e "create database alminium"
$ mysql -u alminium -p alminium < alminium.dump
$ cd /opt/alminium/
$ rake db:migrate RAILS_ENV="production"

このあと、バージョンアップの反映の手順を実施したところ、文字化けを解消できました。

Redmine(MySQL)の文字化けはハマると大変ですね・・・。
今回はRedmine Users (Japanese)のGoogleグループで助言を頂いて解決しました。
いやホント助かりました。この場を借りて御礼申し上げます。


参考情報

  1. Googleから辿ってきましたw

    最近、個人的にALMiniumを立ち上げたので、この記事は今後の参考になります!ありがたいです。

    立ち上げた動機も、@moomindaniさんと近い気がしますのでwいろいろ情報交換できるとうれしいです。

    • @MeganezaruDev さん
      参考になったなら何よりです。
      こちらこそ、ぜひ情報交換させてください。

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。