タイトルの通り,Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった($:も同様).この変更により,以下のような条件でrequireを使っているスクリプトが動かなくなった.
- スクリプトが置いてあるディレクトリdirで実行することが前提として作られている
- 他のスクリプトをdirからの相対パスでrequireしている
$ cat foo.rb require "bar" $ cat bar.rb puts "baz" $ ruby foo.rb <internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- bar (LoadError) from <internal:lib/rubygems/custom_require>:29:in `require' from foo.rb:1:in `<main>'
この場合,以下の解決策が考えられる.
- $LOAD_PATHにdirのパスを追加する
- requireの変わりにrequire_relativeを使い,スクリプトファイルからの相対パスを指定する
require_relativeを使った場合の例は以下の通り.
$ cat foo.rb require_relative "bar" $ cat bar.rb puts "baz" $ ruby foo.rb baz
ただし,require_relativeはRuby 1.9.1以降にKernelモジュールに追加されたメソッドなので,これを使うと以前のバージョンのRubyで動かせなくなる.