From: keiichi matsunaga Date: 2001-07-12T12:07:25+09:00 Subject: [ruby-list:30614] ライブラリから別のライブラリを呼び出すときのパスについて 松永です。 require でライブラリを呼び出すときのパスについて疑問があります。状況 は以下のようなものです。 ・ライブラリを呼び出すスクリプトtest.rb ・test.rbから呼ばれるライブラリfoo.rb ・foo.rbから呼ばれるライブラリbar.rb コードはこんな感じですね。 test.rb ------- require 'foo.rb' ... foo.rb ------- require 'bar.rb' ... 1) 全てを1つのディレクトリに置く require 'foo',require 'bar'のように書けばよく,パスを記述する必要は ない。これはrubyのライブラリ検索パスにカレントディレクトリが含まれてい るからである。 2) ライブラリを/Ruby/lib/ruby/site_rubyなどの「公式」ディレクトリに移 動 1) と同様。  これもrubyのデフォルトのライブラリ検索パスの1つだからである 3) ライブラリを./libディレクトリに移動 以下のように書く必要がある? test.rb ------- require './lib/foo.rb' #...(1) ... foo.rb ------- require './lib/bar.rb' #...(2) ... (1) は実行スクリプトからの相対パスになるということで分かりますが, (2) がよく分かりません。ライブラリは自分のいるところからの相対で別ライ ブラリを読み込んでいるのではないのですね。 4) foo.rb を使う別のスクリプト./test/test2.rbを作成  僕の3)の理解が正しければ,4)をうまく実現する方法がわかりません。 test2.rb ------- require '../lib/foo.rb' #...(1) ... foo.rb ------- require '../lib/bar.rb' #...(2) ...  こう書けばうまくいく?のですが,ライブラリのrequireの中身をスクリプ トの位置に依存して書き換えるというのは変なので,何か勘違いしているので はないかと不安になってきました。 番外)RUBYLIBを使う  環境変数RUBYLIBをセットすると全てrequire 'foo',require 'bar'でうま くいったのですが,これをcgiスクリプトとして動作させるとまたエラーにな ります。cgiとして動作しているときはRUBYLIBは参照されないんでしょうか。 それも変なので僕が何か重大な勘違いをしているような気がします。 ・相互依存するライブラリがあり,それを色々なパスにあるスクリプトからか ら呼び出すことはできるか? ・RUBYLIBをセットすることで解決させても,スクリプトをcgi化すると再びう まくいかなくなるのはなぜか?  の2点が疑問です。  2番目に付いてはwebサーバ等の問題かも知れず,まだ個人的に問題を追いき れていません。よろしくお願いします。 -- 松永肇一(keiichi matsunaga) 株式会社ライフメディア 開発部 TEL:03-5717-6491 FAX:03-5717-6492