Dies passt nicht ganz zu den sonstigen LessCode-Themen, da ich aber momentan keinen anderen aktiven Blog habe, und dies bloggen möchte, landet ausnahmsweise ein technischer Artikel hier 🙂
Mit dem warbler kann man eine JRuby on Rails-App in eine .war-Datei packen und in einem beliebigen Servlet-Container starten.
Was allerdings nicht offensichtlich funktioniert, ist, ĂĽber die Kommandozeile mit der Applikation zu interagieren, denn nirgendwo im System ist sonst ein Ruby-Interpreter installiert.
Daher liegt es nahe, die .war-Datei zu entpacken und den darin enthalten JRuby-Interpreter und sämtliche dazugepackte gems zu nutzen.
Nach einigem Ausprobieren habe ich das heute geschafft, so funktionert es:
export WEBAPP_HOME=... export GEM_HOME=$WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/ ln -s $WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/bin /tmp/bin #gem env shows "RUBY EXECUTABLE: /tmp/bin/jruby" ln -s $WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/lib /tmp/lib export GEM_PATH=$WEBAPP_HOME/WEB-INF/gems/ cd $WEBAPP_HOME/WEB-INF/ java -cp lib/jruby-stdlib-1.5.1.jar -jar lib/jruby-core-1.5.1.jar -I $WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/lib/ruby/1.8 -I $WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/lib/ruby/gems/1.8/ -I $WEBAPP_HOME/WEB-INF/gems/ -I $WEBAPP_HOME/WEB-INF/lib/META-INF/jruby.home/lib/ruby/site_ruby/1.8  -S script/console production
Der Link in /tmp/ ist notwendig, weil ich nicht herausgefunden habe, wie sich der Pfad zum RUBY EXECUTABLE setzen lässt und dieser warum auch immer auf /tmp/ zeigt.
Dieses Prinzip habe ich nur mit Rails-Applikationen getestet, die Bundler für das Gem-Management nutzen. Außerdem ist wichtig, lib/jruby-stdlib-1.5.1.jar und lib/jruby-core-1.5.1.jar zu unzippen