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//WEB-INF

  • RakefileをWEB-INFディレクトリにコピー

    $ cp /Rakefile .

  • db/migrate/以下のファイルをWEB-INF/db/migrateディレクトリにコピー

    $ mkdir -p db/migrate
    $ cp /db/migrate/* db/migrate

  • GEM_HOMEをWEB-INF/gemsにセット

    $ export GEM_HOME=.\gems

  • rake db:migrateを実行

    $ java -jar jruby-complete-1.4.0.jar -S rake db:migrate