IBM Informix und Rails 3 - Teil 1
There was a time, when I shared a blog. This post was written by Stephan. See all blogpost from him or stalk him on github.
Hallo Leute, ich habe es endlich geschafft und werde heute endlich wieder bloggen. Thema soll diesmal die Anbindung von Ruby on Rails 3.2.x an einen Informix Datenbankserver von IBM (IDS, Informix Database Server) sein. Entsprechend meiner Recherche werde ich hier in 2 Teilen die beiden aus meiner Sicht erfolgsversprechendsten Möglichkeiten erläutern: *Verwendung des Rubygems ibm_db 2.5.10: Offizielles Rubygem von IBM mit Unterstützung von DB2- und IDS-Datenbanken *Verwendung des Rubygems ruby-informix 0.8: OpenSource-Projekt mit ODBC-Treiber
Teil 1 Installation IBM_DB GEM 2.5.10
Zur Installation des Paketes müsst ihr euch zunächst das IBM Data Server Driver Package (DS Driver) von der IBM Homepage herunterladen (nach vorheriger Registrierung).
Wichtig: Bitte wählt dabei die passende Datei zu euerem jeweiligen Betriebssystem aus.
Das heruntergeladene Archiv entpackt ihr dann an einer geeigneten Stelle eurer Festplatte (z.B. /opt/ibm/dsdriver).
Für eine erfolgreiche Installation von IBM_DB
müsst ihr abschließend die Variable IBM_DB_HOME
in eurer Konsole erstellen und diese auf den von euch entpackten odbc_cli_driver
-Pfad innerhalb des entpackten Archivs (/opt/ibm/dsdriver) verweisen.
Innerhalb des Pfads in der Variable IBM_DB_HOME
müssen sich demnach die Ordner bin
, lib
und include
des odbc_cli_driver
befinden.
Hier ein Beispiel für meine Linux 32 Bit Installation:
export IBM__DB_HOME=/opt/ibm/dsdriver/odbc_cli_driver/linuxia32/clidriver
Anschließend könnt ihr das Rubygems ibm_db mit folgendem Befehl installieren:
gem install ibm_db
Ist die Variable falsch gesetzt wird die Installation des Rubygems mit folgender Meldung abgebrochen:
test@test:~$ gem install ibm_db
Building native extensions. This could take a while...
ERROR: Error installing ibm_db:
ERROR: Failed to build gem native extension.
/home/test/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
Detected 32-bit Ruby
Environment variable IBM_DB_HOME is not set. Set it to your DB2/IBM_Data_Server_Driver installation directory and retry gem install.
Gem files will remain installed in /home/test/.rvm/gems/ruby-1.9.2-p290/gems/ibm_db-2.5.10 for inspection.
Results logged to /home/test/.rvm/gems/ruby-1.9.2-p290/gems/ibm_db-2.5.10/ext/gem_make.out
Gemfile der Rails-Anwendung anpassen
Habt ihr das Paket erfolgreich installiert müsst ihr nun das Paket in der Rails-Anwendung verfügbar machen:
source 'https://rubygems.org'
gem 'rails', '3.2.3'
...
# Use ibm_db database
gem 'ibm_db'
...
database.yml der Rails-Anwendung anpassen
In einem letzten Schritt folgt die Anpassung der Datenbankkonfigurationsdatei config/database.yml
. Hier wird beispielhaft eine Verbindung zu einer Informix Datenbank rails
aufgebaut:
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
# Adapter wird vom Paket direkt mitgeliefert
adapter: ibm_db
# Datenbankname auf dem Remote Database Server
database: rails
pool: 5
timeout: 5000
# IP bzw. DNS-Eintrag zum Database Server
host: 192.168.1.1
# Konfigurierter Port des Database Server für DRDA Kommunikation
port: 9090
# Nutzername und Passwort
username: informix
password: password123
#test:
# adapter: sqlite3
# database: db/test.sqlite3
# pool: 5
# timeout: 5000
#production:
# adapter: sqlite3
# database: db/production.sqlite3
# pool: 5
# timeout: 5000
...
Active Record und ibm_db
Obwohl das aktuelle Release 2.5.10 (Stand 14. Mai 2012) eine Unterstützung von Rails 3.2.x verspricht ergaben sich dennoch einige Fehler bei der Nutzung:
- Datumskonvertierung falsch (Migrations mit
created_at
undupdated_at
Feldern auf Grund eines falschen Zeitstempelformats zwischen Ruby und Informix) - Limit von Select-Anweisungen muss für jedes Model angegeben werden, da sonst falsche SQL-Anweisungen erzeugt werden.
- Probleme beim Finden von einzelnen Records an Hand der ID (Standard-Ressource Rails mit show view)
- falsche Objektgröße für Migrationen mit Feldern vom Typ Text (cblob)
Die Entwickler von IBM (vor allem Praveen Devarao) arbeiten an einer Bereinigung der Fehler für Informix-Datenbanken.
Weitere Informationen zu dieser Problematik können hier auf rubyforge nachgelesen werden.
Quellcodebeispiele für die zahlreichen Informix-Treiber und Anbindungsmöglichkeiten können im kostenlosen Redbook IBM Informix Developer’s Handbook
nachgeschlagen werden ( Download hier.
Weiterhin werden dort auch die Portsettings und Protokolle des Informix Database Servers erläutert und beschrieben (vor allem DRDA).
Bis zur Beseitigung der Fehler (innerhalb des nächsten Monats) kann man ibm_db
auf Grund der erläuterten Fehler nur beschränkt einsetzen.
Daher widme ich mich im kommenden 2. Teil dem Paket ruby-informix
, mit der ich hoffentlich eine Rails-Anwendung zuverlässig an einen Informix 11.5 Datenbakserver anbinden kann.
Vielen Dank fürs Lesen