日々精進

新しく学んだことを書き留めていきます

requireの動作

RSpecでテストを実行しようとすると以下のエラーが出た。

iconv.dll: 127: 指定されたプロシージャが見つかりません。 - Init_iconv (LoadError)

エラーメッセージで検索すると以下のページが見つかった。
http://www.ync-net.co.jp/~kaz/diary/?date=0829
この記事によると原因はiconv.soをロードすべきところをiconv.dllをロードしてしまっているためのようだ。
実行するSpecファイルと同じフォルダにiconv.dllがあったのでこれをリネームするとエラーが出なくなった。
つまり、requireはある順序でPATHを検索していき、最初に見つかったファイルをロードするんだろう。
↓のrequireについての説明を見ても検索するPATHの順序は書いてなかったので順序は謎だけど。。
Ruby Reference Manual
↑を見る限り、解決策としては

require 'iconv'

とするのではなく、

require 'iconv.so'

のように拡張子まで指定するのでもOKのように思えるが、この修正ではエラーは解消できなかった。