JRuby: Rails console direkt aus einer gewarbleten .war-Datei heraus starten

22 August 2010 von Heiko Kommentieren »

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

Schreibe einen Kommentar