Tuesday, 25. September 2007
jRuby ist eine interessante Entwicklung. Es ist fast vollständig kompatibel zu
Ruby, läuft aber innerhalb der Java VM. Dadurch gewinnt man eine enorme Portabilität für Ruby Anwendungen. Interessant wird das ganze dann, wenn man es mit
Ruby on Rails verbindet und so Web-Projekte überall deployen kann, ohne Ruby zu installieren.
Will man nun aber z. B. eine portable Anwendung stricken, gibt sich ziemlich schnell die Frage, welche Datenbank man nutzen möchte. SQLite kommt nicht in Frage, da die C-Bibliothek nicht portabel ist, und daher immer die passenden Binär-Pakete mitgeliefert werden müssten.
HSQLDB ist eine leichtgewichtige Java-Datenbank die dafür in Frage kommt. Wenn man nur rake db:migrate ausführt, um die Datenbank zur erstellen, wird man zwangsweise Probleme kriegen. Das liegt dabei weder an jRuby noch an Rails. Vielmehr verwendet HSQLDB standard-mäßig eine Schreibverzögerung. Diese sorgt aber dafür, dass die Java VM beendet wird
bevor die
SQL-Befehle geschrieben wurden!
Es gibt dabei eine recht einfache Lösung. Hat man ein paar mal rake db:migrate ausgeführt, so befindet sich unter den erstellten Datenbank-Dateien auch eine *.script-Datei. Wobei das * für den angegebenen Datenbank-Name steht. Bei mir z. B. ist das development.script. Dort findet sich auch ein
SQL-Befehl für die Schreibverzögerung. Stellt man diese Schreibverzögerung auf 0, dann klappt auch das erstellen der Datenbank problemlos und man kann HSQLDB mit jRuby on Rails verwenden. Bei mir sieht die modifizierte development.script dann übrigens so aus:
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 0