requireにコケてコケて

自分で外部に定義したクラスを読み込みたいとき、Rubyなら'require'使いますよね。

10回に3回くらいハマるのでメモをしておく

hoge
   |
   |---test.rb
   |
   |---foo
            |
            |---module.rb

こういうとき。

#test.rb
require 'foo/module'

requireするときは拡張子.rbはいらない。これを実行すると、

/usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- foo/module (LoadError), referer: path/to/test.rb

*1

こうなる

なんでなん?

ディレクトリ構造自体は間違えていないから途方にくれる どうすればエラーが消えるんでしょう? 答えは

require './foo/module'

こう。何が違う?

'./'

これ。

また、こちらのエントリによると、

require File.expand_path('./foo/module', __FILE__)

が一番良いそうです。相対パスの指定大事。

*1:ruby1.9.1なのは大学の計算機だからです僕は悪くない僕は悪くない僕は悪くない僕は悪くない僕は悪くない僕は悪くない