先日インストールしましたプロジェクト管理ツールの Redmine ですが、1.0.1 として 1系の正式版がでました!
というわけで、先日は mod_rails で動作させていましたが、せっかくなので今度は JRuby を使って Tomcat6 上にデプロイしてみたいと思います。
なにか利点があるかって話ですが、1パッケージにして JavaVM で動作させておけば、OS にのっている Ruby 実行環境に依存しなくて済むのがいいところ。 gem のバージョン依存とか考えなくていいし、Servlet の実行環境さえあればどこにでも乗せられるのでなかなか便利かもしれません。
とりあえず、.war 玉をつくる作業した環境は以下の通りです。
[hiromasa@localhost ~]$ java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
[hiromasa@localhost ~]$ jruby -v
jruby 1.5.2 (ruby 1.8.7 patchlevel 249) (2010-08-20 1c5e29d) (Java HotSpot(TM) Client VM 1.6.0_21) [i386-java]
[hiromasa@localhost ~]$ sudo /opt/tomcat6/bin/version.sh
[sudo] password for hiromasa:
Using CATALINA_BASE: /opt/tomcat6
Using CATALINA_HOME: /opt/tomcat6
Using CATALINA_TMPDIR: /opt/tomcat6/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat6/bin/bootstrap.jar
Server version: Apache Tomcat/6.0.29
Server built: July 19 2010 1458
Server number: 6.0.0.29
OS Name: Linux
OS Version: 2.6.18-194.11.1.el5
Architecture: i386
JVM Version: 1.6.0_21-b06
JVM Vendor: Sun Microsystems Inc.
まずは、JRuby のインストールから。
$ sudo wget http://jruby.org.s3.amazonaws.com/downloads/1.5.2/jruby-bin-1.5.2.tar.gz
$ sudo tar zxvf jruby-bin-1.5.2.tar.g
$ cat /etc/profile
export JRUBY_HOME=/opt/jruby-1.5.2
export PATH=$PATH:$JRUBY_HOME/bin
でもって、必要な gems を入れていきます。 ぼくは PostgreSQL で動作させているため、jdbc はポスグレのになります。
$ sudo jruby -S gem install rail
$ sudo jruby -S gem install activerecord-jdbcpostgresql-adapter
$ sudo jruby -S gem install warbler
$ sudo jruby -S gem install rack --version '~> 1.0.1
warbler というのが、Rails のアプリを .war 玉にしてくれるありがたいものです。 あと、rack が 1.0.1 じゃないと後で Redmine を動かしたときに Exception するので入れておきます。
でもって、Redmine をダウンロードしてきて、普通に config を設定していきます。 config/database.xml については以下のように。
[hiromasa@localhost redmine-1.0.1]$ cat config/database.yml
# MySQL (default setup).
production:
adapter: jdbcpostgresql
driver: org.postgresql.Driver
database: [dbname]
host: localhost
username: [username]
password: [password]
encoding: utf8
scheme_search_path: public
以下、Redmine のファイルを置いた直下のディレクトリにて。
これで DB のマイグレーションができるハズです。(ここでは .war をつくるのと同じ環境に入れてます)
$ sudo jruby -S rake db:migrate RAILS_ENV="production"
でもって、いよいよ warbler で .war をつくります。 まずは config をつくってもらいます。
$ sudo jruby -S warble config
ほいでもって、できた config を編集。
config/warble.rb
config.dirs = %w(app config lib log vendor tmp lang)
config.gems << "activerecord-jdbcpostgresql-adapter"
config.gem_dependencies = true
config.webxml.rails.env = 'production'
config.gems["rack"] = "1.0.1"
最後の rack のバージョン指定をしないと依存関係でおちるようです。(新しい方が使われてしまう)
できたら、いよいよ。
1: $ sudo jruby -S warble
[root@localhost redmine-1.0.1]# ls -laF redmine-1.0.1.war
-rw-rw-rw- 1 root root 17230199 8月 28 16:01 redmine-1.0.1.war
[tegaki]キター![/tegaki]
こころを込めて配置します。 ここでは、war つくった環境と同じなのでそのまま…
$ sudo /etc/init.d/tomcat6 stop
$ sudo cp redmine-1.0.1.war /opt/tomcat6/webapps/redmine.war
$ sudo /etc/init.d/tomcat6 start
無事デプロイ成功。 起動しました。 🙂
でもって、添付ファイルについてが気になって調べてみたのですが、どうやら WEB-INF/files に置かれる模様。 こんなところに置いてたらちょっとしたことで消えちゃういますのでシンボリックリンクで対応。
$ sudo ln -s /home/apache/redmine/files/ files
デプロイするたびにですが、しょうがないですね。 設定とか実はあるのかもしれませんがとりあえず。 あとは必要なら mod_ajp でつなぐなど。
というわけで、できあがった redmine.jar と Tomcat さえあればどこでも動くようになりました。 とりあえず事務所に持って行きます。。(笑)
DB マイグレーションは、 .war 作成でつかった JRuby 自体もただコピーするだけで他に持って行けると思うので、それでマイグレーション動かするのが良さそうですね。
エクスポートインポートでいければ Stax Networks とかにもデプロイできるかもしれません。(ただしファイルがかけないため、添付ファイルはだめだと思われる)
さて気になる .war ファイルですがほどいてみると以下のようになっていました。
画像が小さくて見にくいですが、WEB-INF/gems/gems に依存する gems が格納されるようです。 あとは、ひとつの filter から jruby を起動して .rb を動的コンパイルしつつ動作という感じでしょうか。
動きはきびきびして、いい感じです。 先ほど入れて一通り動作見たばかりなので、もうちょっと動作させてみたいと思います。
以上、デプロイ田中でした。 ざっ。