JRuby(Ruby)がインストールされていない環境でdb:migrateする
Ruby on Railsアプリをwarbler固めてTomcatで動かす場合、サーバーにはJRuby(Ruby)自体がインストールされていないことも多いと思います。
warでバイナリ配布してる場合でも、移行はやっぱりdb:migrateを使いたいところです。
javaのみインストールされている環境でrakeやgemを使うために、jruby-complete-1.4.0.jarというjarファイルが用意されています。jruby-complete-1.4.0.jarはJRuby本家サイトからダウンロード(http://jruby.org/download)できます。
rakeはこんな感じに実行します:
$ java -jar jruby-complete-1.4.0.jar -S rake db:migrate
JRuby(Ruby)が無い環境でrakeは実行できるので、展開されたwarファイルからdb:migrateを実行できるか試してみました。
warblerで固めたwarファイルを展開すると、WEB-INFディレクトリの下にRailsプロジェクトのディレクトリが入っているので、WEB-INFでrake db:migrateを実行できそうな気がします。
/WEB-INF/app config gems lib log tmp vender
(ちなみに、javascriptやstylesheetsなどpublicの中身はコンテキストの直下です。)
WEB-INFディレクトリにはRakefileとdb/migrateディレクトリが無いので、rake db:migrateを実行するためにはRailsプロジェクトからこの二つだけコピーしてくる必要があります。
- Rakefile
- db/migrate/*
後は、GEM_HOMEをWEB-INF/gemsにセットするとrake db:migrateが実行できるようになります。
まとめると、こんな感じです。
- WEB-INFディレクトリに移動
$ cd $CATALINA_HOME/webapps/
- RakefileをWEB-INFディレクトリにコピー
$ cp
- db/migrate/以下のファイルをWEB-INF/db/migrateディレクトリにコピー
$ mkdir -p db/migrate
$ cp
- GEM_HOMEをWEB-INF/gemsにセット
$ export GEM_HOME=.\gems
- rake db:migrateを実行
$ java -jar jruby-complete-1.4.0.jar -S rake db:migrate