このドキュメントでは、Ruby からEmpress データベースをアクセスするためのセットアップ方法 および簡単なアクセステストについて説明します。
Empress Version 8.62 を Ruby から利用するためには、ODBCマネージャ (unixODBC) Ruby ODBC インターフェイス、Ruby DBI インターフェイスを必要とします。
Ruby から Empress をアクセスするためには、以下のソフトウェアが必要になります。 適当なダウンロードサイトから取得してください。
オブジェクト指向スクリプト言語 Ruby.
現在(2004/07) の安定バージョンは ruby 1.8.1 です。 ruby は、http://www.ruby-lang.org/ja からダウンロードできます。
Linux/Unix 汎用ODBC ドライバマネージャとして、Ruby ODBC が対応している unixODBCを使用します。 (ODBCドライバマネージャとして iodbc でも問題ないようですが稼動確認をしていません。)
現在(2004/07) の最新バージョンはunixODBC-2.2.9 です。 unixODBC は、http://www.unixodbc.org からダウンロードできます。
Ruby の ODBC インターフェイスです。
現在(2004/07) の最新バージョンは ruby-odbc-0.994 です。 ruby-odbc は、 http://www.ch-werner.de/rubyodbc からダウンロードできます。
Ruby の標準データベースインターフェイスです。
現在(2004/07) の最新バージョンは ruby-dbi-all-0.0.21 です。 Ruby DBIは、http://ruby-dbi.sourceforge.net からダウンロードできます。
以降でそれぞれのモジュールのインストールの説明をしますが、 先にこのドキュメントを記述するためにインストールをおこなったマシン環境を示します。
最初にRuby をインストールします。
ソースパッケージを展開し、README (README.ja) ファイルに書かれている手順に従いインストールします。
ex. Ruby のインストール例
% cd /usr/local/src
% tar xvfz /tmp/ruby-1.8.1.tar.gz
% cd ruby-1.8.1
% ./configure
% make
% make test
% su
# make install
次にunixODBCをインストールします。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. unixOBDC のインストール例
% cd /usr/local/src
% tar xfz /tmp/unixODBC-2.2.9.tar.gz
% cd unixODBC-2.2.9
% ./configure
% make
% su
# make install
デフォルトでは /usr/local 以下にインストールされます。
また、./configure でエラーになる場合は、エラー内容にもよりますが、
以下のオプションを試してみてください。
% ./configure --enable-gui=no --enable-drivers=no
Ruby ODBC をインストールするためには、先に Ruby と unixODBC をインストールする必要があります。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. Ruby ODBC のインストール例
% cd /usr/local/src/ruby
% tar xvfz /tmp/ruby-odbc-0.994.tar.gz
% cd ruby-odbc-0.994
% ruby extconf.rb
% make
# su
# make install
※Ruby ODBC のテストは、ODBCの設定が必要なため省略します。
Ruby DBI をインストールするためには、先に Ruby をインストールする必要があります。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. Ruby DBI のインストール例
% cd /usr/local/src/ruby
% tar xvfz ruby-dbi-all-0.0.21.tar.gz
% cd ruby-dbi-all
% ruby setup.rb config --with=dbi,dbd_odbc
% ruby setup.rb setup
# su
# ruby setup.rb install
以上でインストールは完了です。
ODBC を利用するためには、ODBCの環境設定ファイル(odbcinst.ini と odbc.ini) および環境変数 (ODBCHOME と MSODBCINIFILEの設定が必要です。
unixODBC マネージャからEmpress ODBC ドライバを呼び出すために、 Empress ODBCドライバの情報を odbcinst.ini ファイルに登録します。 odbcinst.iniファイルは、デフォルトでは$ODBCHOME/etc/odbcinst.ini (例の環境では/usr/local/etc/odbcinst.ini)にあります。 以下に設定例を示します。
ex. odbcinst.ini のEmpress ODBC ドライバの設定例
#---------
[Empress]
Description = Empress ODBC Driver
Driver = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
Setup = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
FileUsage = 1
#---------
'[ ]' で囲まれた中にドライバ名として "Empress"を指定します。 それ以降にEmpressドライバの情報を記述します。 Description は説明(コメント)、 DriverにはEmpress ODBC ドライバのシェアードライブラリのパスを指定します。 ($EMPRESSPATH/shlib/libempodbccl.so) SetupもDriverと同じシェアードライブラリファイルのパスを指定します。 FileUsageには "1" を設定します。
|
[ 参考 ]
"odbcinst.ini"のパラメータについてのunixODBCのマニュアルの記述を要約すると "setup" は、新たにDSNを追加するためのODBCConfig(GUIツール)の「追加」ボタンを 押したときに使用されるライブラリでODBCConfig(GUIツール)を使用していない環境 では重要ではありません。最も重要なパラメータは "driver"で、 SQLConnectまたは SQLDriverConnectがコールされた時にドライバマネージャは動的に 指定されたライブラリをロードします。その指定が間違っている場合は動作しません。 "fileusage"は、odbcinst プログラムによって追加されます。テキストエディタを使って 編集した場合は、自分自身で追加する必要があります。 |
odbc.iniファイルは、ODBCデータソース(DNS)を定義します。 このファイルは、デフォルトでは$ODBCHOME/etc/odbc.ini (例の環境では/usr/local/etc/odbc.ini)にあり、 unixODBC および Empress ODBCドライバの両方が参照します。 以下に設定例を示します。
ex. odbc.ini のODBC データソースの設定例
#---------
[testdb]
Description = Test to Empress
Driver = Empress
Database = /home/empress/testdb
Server = 192.168.3.183
Port = 6322
#---------
'[ ]' で囲まれた中にデータソース名を記述し、それ以降にデータソースの定義を記述します。 これらのパラメータは、Description, Driver を除いて Empress ODBC ドライバが参照する パラメータになります。 Description は、説明(コメント)です。Database はアクセスするデータベースのパス、 Server は、ODBC サーバーのアドレスまたはホスト名、Port はODBCサーバーのポート番号を 指定します。 Driver は unixODBC が使用し、値はodbcinst.ini で設定したEmpressドライバの名前と 関連付けられます。
unixODBC が必要な環境変数として、ODBCHOME があります。 設定する値はunixODBC がインストールされた ディレクトリを設定します。
ex. 環境変数 ODBCHOMEの設定例
例では unixODBC は /usr/local 以下にインストールされています。
% export ODBCHOME=/usr/local
Empress ODBC ドライバが必要な環境変数としてMSODBCINIFILE があります。 設定する値は、odbc.iniファイルへのパスを指定します。
ex. 環境変数 MSODBCINIFILE の設定例
例では odbc.iniファイルは /usr/local/etc/odbc.ini にあります。
% export MSODBCINIFILE=/usr/local/etc/odbc.ini
|
[ 参考 ]
(1) 例では、Empress が使用可能なユーザーでの設定例になります。 そのため、既にEmpressを使用するために必要な環境変数 EMPRESSPATH と LD_LIBRRY_PATH (Empressシェアードライブラリへのパス) が設定済みということが前提となっています。 Empressを使用する環境を設定していないユーザーでのODBCの設定の場合は、 EMPRESSPATH と LD_LIBRRY_PATHを設定してください。
ex. 環境変数 EMPRESSPATH と LD_LIBRRY_PATH の設定例
例では Empress は /home/empress/Empress/v8.62/installation
以下にインストールされているとします。
% export EMPRESSPATH=/home/empress/Empress/v8.62/installation
% export LD_LIBRRY_PATH=$EMPRESSPATH/shlib
(2) unixODBC のインストール時にprefixを指定した場合、シェアードライブラリの 環境変数 LD_LIBRARY_PATHの指定が必要になります。 |
テストとしてサンプルプログラムを実行して、Empressのデータベースにアクセスしてみます。
サンプルプログラムを実行する前にEmpress ODBC サーバーが動作しているかを確認します。 Empress サーバー管理者でログインし、以下のコマンドで確認します。 (Empress サーバーの詳細は「コネクティビティ(ODBC)サーバーの利用について」を参照してください。) また、サンプルプログラムからODBCサーバーにアクセスするためのユーザーと パスワードをEmpressサーバーのパスワードファイルに設定されていない場合は、 こちらも合わせて設定してください。
ex. Empress サーバーの確認
# empsvadm empodbcsv info
ログイン:empress
パスワード:XXXXXXX
サーバ名: empodbcsv
サーバタイプ: odbc
スプール PID : 359
管理ポート: 6321
サービスポート:6322
#サービスサーバ最少/最大/起動中: 3/257/3
サーバ ID PID #クライアント
--------- ---------- -------------
4 363 0
3 362 0
2 361 0
1 360 1
-------------
総クライアント: 1
クライアント ID PID 開始 名前
--------------- ---------- -------- --------------------
1000001* 358 18:14:12 empress(empress@localhost)
#
ex. ユーザーの登録
# emppassword empodbcsv add empress
新 Empress パスワード:XXXXXXX
新 Empress パスワード再入力:XXXXXXX
Done.
#
※ アクセスするEmpress ODBC サーバーは、Ruby ODBC 環境をインストールしたマシン以外でも構いません。
Empress ODBC サーバーが起動されているマシン上にサンプルで使用するデータベースを作成します。 単純なテーブルを作成し、データを挿入します。
ex. サンプルデータベースの作成
% empmkdb testdb
% empsql testdb
EMPRESS V8.62
(c) Copyright Empress Software Inc. 1983, 2003
1* create t1 (no, name nlschar);
2* display t1 all;
*** Table: t1 ***
Attributes:
no integer
name nlscharacter(25,1)
Creator: empress
Lock Level: RECORD
Table #: 15
Records: 0
Record size: 28
3* insert into t1 values (1, 'あああ');
4* insert into t1 values (2, 'いいい');
5* select * from t1;
no name
1 あああ
2 いいい
6* exit
%
以下は、Ruby DBI のサンプルプログラムです。
ex. サンプルプログラム -- odbc.rb
require 'dbi'
$KCODE='EUC'
dbh = DBI.connect('DBI:ODBC:testdb', 'empress', 'emp123')
sth=dbh.prepare('select * from t1')
sth.execute
while row=sth.fetch do
p row
end
dbh.disconnect
このサンプルで確認が必要な箇所は、DBI.connect のパラメータ(DNS、ユーザー、パスワード) になります。 DNS の'DBI:ODBC:'までは Ruby ODBC インターフェイスを使用することを意味しますので固定です。 最後の"testdb"は odbc.ini ファイルに設定したデータソース名になります。 ユーザーとパスワードは、Empress ODBC サーバーのパスワードファイルに登録した ユーザー・パスワードを指定します。
サンプルプログラム(odbc.rb) を実行します。
ex. サンプルプログラムの実行
% ruby odbc.rb
[1, "あああ"]
[2, "いいい"]
%
上記のように表示されれば、Empress ODBC サーバーに接続され、 サンプルデータベースからのデータ取得ができています。
以下に無理にエラーにさせた例を示しますので、エラーが表示した場合の参考にしてください。
環境変数 MSODBCINIFILE が設定されていない場合
[unixODBC][Empress Software][ODBC LIB/DLL] データソース名が見つからず、デフォルト
のドライバーが指定されていない
また、MSODBCINIFILEが設定されていてパスが間違っている場合は
「ODBC.INI ファイルがみつかりません。」というエラーになります。
ODBCサーバーが立ち上がっていないか、あるいはodbc.ini の Server の値が間違っている場合
[unixODBC][Empress Software][ODBC LIB/DLL] サーバ 'empodbcsv' の接続がオープンされません。;
オープン反応タイムアウト
odbc.ini の Database の値で指定されているデータベースが存在しない場合、あるいは間違っている場合
[unixODBC][Empress Software][ODBC LIB/DLL] 無効なデータベースです。
プログラム内で指定されたデータソース名がodbc.ini に存在しない場合
[unixODBC][Driver Manager]Data source name not found, and no default driver specified