Ruby からの Empress の利用について(Linux/Unix)

第1版 2004/07

1. はじめに

このドキュメントでは、Ruby からEmpress データベースをアクセスするためのセットアップ方法 および簡単なアクセステストについて説明します。

Empress Version 8.62 を Ruby から利用するためには、ODBCマネージャ (unixODBC) Ruby ODBC インターフェイス、Ruby DBI インターフェイスを必要とします。

2. セットアップ方法

2.1 準備

Ruby から Empress をアクセスするためには、以下のソフトウェアが必要になります。 適当なダウンロードサイトから取得してください。

2.2 インストール環境の例

以降でそれぞれのモジュールのインストールの説明をしますが、 先にこのドキュメントを記述するためにインストールをおこなったマシン環境を示します。

マシン環境によっては、セットアップ手順どおりではインストールできない可能性も あるとは思いますが、その点は上記の環境下での説明ということでご理解ください。

2.3 Ruby のインストール

最初に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         

2.4 unixODBCのインストール

次に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

2.5 Ruby ODBC のインストール

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の設定が必要なため省略します。

2.6 Ruby DBI のインストール

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

以上でインストールは完了です。

3. ODBC の設定

ODBC を利用するためには、ODBCの環境設定ファイル(odbcinst.ini と odbc.ini) および環境変数 (ODBCHOMEMSODBCINIFILEの設定が必要です。

3.1 odbcinst.ini ファイルの設定

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 プログラムによって追加されます。テキストエディタを使って 編集した場合は、自分自身で追加する必要があります。

3.2 odbc.ini ファイルの設定

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ドライバの名前と 関連付けられます。

3.3 環境変数の設定

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を使用するために必要な環境変数 EMPRESSPATHLD_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の指定が必要になります。

4. サンプルプログラムでのODBCアクセステスト

テストとしてサンプルプログラムを実行して、Empressのデータベースにアクセスしてみます。

4.1 Empress ODBC サーバーの確認

サンプルプログラムを実行する前に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 環境をインストールしたマシン以外でも構いません。

4.2 サンプルデータベースの作成

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
  %

4.3 サンプルプログラム

以下は、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 サーバーのパスワードファイルに登録した ユーザー・パスワードを指定します。

4.4 サンプルプログラムの実行

サンプルプログラム(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 


Copyright Empress Japan. 2004