Redmine を Tomcat 上で実行する(JRuby on Rails)

Redmine 0.7.2 を JRuby on Rails 環境を使って Tomcat 上で動作させてみる。(Radmine を WAR ファイル化して Tomcat にデプロイして実行)

使用した環境は以下のとおり。

インストール

とりあえず、JavaJRubyTomcatMySQL は事前にインストールして実行できるように設定しておく。(Redmine も適当なディレクトリに解凍しておく)

次に、JRubyRubyGems を使って以下のモジュールをインストールする。

Warbler は JRuby on Rails で作成したアプリケーションを war ファイル化して、Servle Engine 上で実行するためのモジュール。

実行するコマンドは以下のとおり。

>jruby -S gem install rails
>jruby -S gem install activerecord-jdbc
>jruby -S gem install activerecord-jdbcmysql-adapter
>jruby -S gem install warbler

なお、activerecord-jdbcmysql-adapter は特にインストールしなくても良さそうだが、今回はインストールすることにした。(インストールしなかった場合、config/database.yml の adapter は "jdbc" と指定することになる)

また、アダプターは activerecord-jdbc{DB名}-adapter という名称でいろいろと用意されているようなので、他 DB を使う場合は {DB名} の箇所に利用する DB の名称を指定することになる。(例: activerecord-jdbch2-adapter, activerecord-jdbcderby-adapter とか)

設定変更

RedMine のアーカイブファイルを解凍したディレクトリの config/environment.rb ファイルの RAILS_GEM_VERSION を 2.1.0 に書き換える。(Rails 2.1.0 上で実行できるようにする)

config/environment.rb
RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION

次に、以下のコマンドを実行して、RedmineRails 環境を更新する。

>jruby -S rake rails:update

DB 作成

MySQLredmine_development データベースを作成。

mysql>create database redmine_development;

config/database.yml.example を元に config/database.yml を作成し、JDBC を使った MySQL 用の設定を行う。

config/database.yml
development:
  adapter: jdbcmysql
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost/redmine_development
  username: root
  password:

以下のコマンドを実行して、テーブルの作成や初期データの挿入を実施する。

>jruby -S rake db:migrate

WEBrick で動作確認

WEBrick を使った Redmine の動作確認を実施する。以下のコマンドを実行して、Web ブラウザで http://localhost:3000/ にアクセスし、正常に動作しているか確認。

>jruby script/server

ちなみに、ユーザー名 admin、パスワード admin で Redmine にログインできる。

WAR ファイル作成

WAR ファイル化自体は warble を実行するだけでよいのだが、これだけだと activerecord-jdbcmysql-adapter や Redmine の lang ディレクトリが含まれなくなるので、これを解決するために Warbler の設定ファイルを生成して編集する。

以下のコマンドで Warbler の設定ファイルを生成。

>jruby -S warble config

生成された設定ファイル config/warble.rb に以下の内容を追加して編集。

  • config.dirs に lang を追加(メニュー表示を正しく行うため)
  • config.gems に activerecord-jdbcmysql-adapter 追加
config/warble.rb
Warbler::Config.new do |config|
  config.dirs = %w(app config lib log vendor tmp lang)
  config.gems << "activerecord-jdbcmysql-adapter"
  config.gem_dependencies = true
  config.webxml.rails.env = 'development'
end

今回は、development 用の DB しか用意していないため、config.webxml.rails.env を production から development に変更した。

以下のコマンドで war ファイルがカレントディレクトリに生成される。

>jruby -S warble

Tomcat にデプロイ

生成された redmine-0.7.2.war ファイルを Tomcat の webapps ディレクトリに配置して、Tomcat を実行。Web ブラウザで http://localhost:8080/redmine-0.7.2/ にアクセスして動作を確認。

簡単に使ってみた限りでは、とりあえず普通に動作した。
ただ、使ってるうちに java.lang.OutOfMemoryError: Java heap space なんてのが発生してしまった。(環境に問題があるのかもしれんが)