Sequel mit Oracle auf Snow Leopard
Um auf eine Oracle-Datenbank von Ruby zugreifen zu können sind leider einige Vorarbeiten notwendig. Wer nicht den JRuby-Weg gehen möchte, findet hier eine Anleitung, die hauptsächlich auf den Posts von Alistair’s cakeBlog und ray_apps_blog, der Sequel-Doku und etwas Herumprobieren beruht.
1. Schritt: Oracle 64-Bit Instant Client installieren
Dazu müssen 3 Pakete von der Oracle-Seite geladen werden: Instant Client Package – Basic, Instant Client Package – SDK und Instant Client Package – SQL*Plus. Die nervige Oracle-Account Anmeldung kann man sich nicht ersparen, aber achte danach darauf die 64 bit Pakete zu laden, sie sind etwas weiter unten auf der Seite zu finden!
Ich entpacke alle Dateien in ein Verzeichnis: /Users/niels/oracle-instaclient
Nach dem Entpacken bekommen die libraries noch symlinks:
sudo ln -s libclntsh.dylib.10.1 libclntsh.dylib
sudo ln -s libocci.dylib.10.1 libocci.dylib
Der Instant Client benötigt ein tnsnames.ora File, um DB-Verbindungen aufzubauen. Das File lege ich einfach in das gleiche
Verzeichnis. Kleiner Tipp, ein tnsnames.ora File liegt auch immer auf dem Oracle Server unter $ORACLE_HOME/network/admin/, genau diese File
benötigt man in der Regel auch lokal.
Beispiel für ein tnsnames.ora File:
ESSEX_LATEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = 172.18.1.4) (PORT = 1521))
)
(CONNECT_DATA =
(SID = LATEST)
)
)
Pfade einrichten
Es müssen einige Pfade gesetzt werden, ich habe daher die folgenden Zeilen in meine ~/.profile hinzugefügt. Da ich alle Files in einem
Verzeichnis abgelegt habe, zeigen auch alle Pfade dorthin.
ORACLE_PATH=~/oracle-instaclient
export DYLD_LIBRARY_PATH="${ORACLE_PATH}"
export SQLPATH="${ORACLE_PATH}"
export TNS_ADMIN="${ORACLE_PATH}"
export NLS_LANG="AMERICAN_AMERICA.UTF8"
export PATH=$PATH:$DYLD_LIBRARY_PATH
Testen mit sqlplus
Ob der erste Schritt funktioniert hat, zeigt ein kurzer Test mit sqlplus. Das Tool liegt im Pfad und der connect_identifier ist das “Ding” aus der tnsname.ora, also sollte dies hier im Terminal sofort funktionieren:
# Verbinden mit sqlplus: sqlplus <username>/<password>@<connect_identifier>
# sqlplus beenden mit 'quit'
sqlplus niels/secretpw@ESSEX_LATEST
2. Schritt: ruby_OCI8 installieren
Sequel benötigt rubi_OCI8, um Oracle zu unterstützen, also führt der nächste Schritt zu OCI8. Es ist nicht nötig OCI8 selbst zu bauen, wie auf der Seite beschrieben, einfacher ist es das gem zu installieren:
sudo env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH ARCHFLAGS="-arch x86_64" gem install ruby-oci8
Hier mein kleines Testscript db.rb, das sofort funktionieren sollte:
require 'oci8' conn = OCI8.new("niels", "geheimespw", "//essex/LATEST") conn.exec('select * from smiley.product') do |r| puts r.join(',') end conn.logoff
Starten mit:
ruby -rubygems db.rb
3. Schritt: Sequel installieren
Nun endlich zu Sequel:
sudo gem install sequel
Danach passe ich mein Testscript auf Sequel an. Ich hab ziemlich lange rumprobiert, bis mir klar wurde wie man die SID (im Beispiel ‘LATEST’) an Sequel übergeben muss.
require 'oci8' require 'sequel' DB = Sequel.oracle('LATEST', :user=>'niels',:password=>'geheimespw', :host=>'essex', :port=>'1521') DB['select * from smiley.product'].each do |row| p row end
Das ist es auch schon! Vielen Dank an die oben erwähnten Blogs.
Mehr? Aktuelle Artikel oder alle Artikel im Archiv.