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:

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