BTS の redmine や retrospectiva を war 化して
JRuby で動かそうとしたところ結構はまりました
コードは
https://github.com/kkkon/redmine-war
https://github.com/kkkon/retrospectiva-war
で公開しています。
動機としては redmine の REST API をテストする時に
jenkins のプラグイン開発の時と同じように jetty でインスタンスを駆動できればと探して
warbler の存在を見つけたので少し時間をかけてトライしてみました。
肝となっている部分は ant build.xml が全てです
最初は maven から jruby-rake-plugin を使用してましたが
bundle を実行するために環境変数でパスを通す必要があるみたいだったので断念しました。
(時間がとれたら contribute します)
第1の関門は openssl
gem の jruby-openssl 0.7 でないとうごかね~
(JRuby 1.7 系列だと openssl 問題が発生しないが Ruby 1.9 が標準になっているのと yaml エンジンの問題から却下)
第2の関門は warbler を何も考えずに gem install warbler すると
rake やら依存している gem の最新版がインストールされてうごかなくなる
=>warbler が依存している gem をバージョン指定で先にインストールして warbler をインストールするときに依存無視でインストール
redmine の Gemfile には gem jruby-openssl が記述されているが
バージョン子弟がかかれていないので最新版が入るのを回避するためにバージョン指定を追加する
=>ruby スクリプト script/jruby1.8.rb で Gemfile を書き換え
このあたりで war が出来上がるが実際には使用できない war が出来上がる orz
war を展開するとなぜか jruby-jars が 1.7 系列が同梱されている…
=>config/warble.rb で config.gems["jruby-jars"] = “1.6.8″ を追加
起動するようになっても bundle で without 指定した mysql などが
なぜか Gem が見つからないエラーになる
=>config/warble.rb で
config.dirs に “.bundle”
config.includes に Gemfile.local
を追加
この段階で本体だけではあるが war が用意できるようになってます。
あとは plugin や db:migrate をどう裁くようにするかな…