У меня есть приложение Rails, которое пытается использовать гем gnuplot, но Rails не потрудится загрузить его. Это находится в моем Gemfile, и я установил его с установкой пакета. Бандл об этом знает:
vp117025:src tim$ bundle show gnuplot
/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6
Но он не появляется в консоли Rails (и не доступен из моего приложения), даже после явного требования, которое не должно быть необходимым.
vp117025:src tim$ rails console
Loading development environment (Rails 3.1.0)
ruby-1.9.2-p290 :001 > require 'gnuplot'
=> false
ruby-1.9.2-p290 :002 > require 'gnuplot.rb'
=> false
Теперь проверьте, есть ли имя модуля в таблице констант:
ruby-1.9.2-p290 :003 > Module.constants.include? :Gnuplot
=> false
Это не так! Модуль не должен быть действительно доступным. Это происходит даже при том, что обязательный путь поиска содержит каталог, в котором находится gnuplot.rb.
ruby-1.9.2-p290 :004 > $:.include? "/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6/lib"
=> true
Если я включу файл явно по его полному пути, он будет работать!
ruby-1.9.2-p290 :005 > require "/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6/lib/gnuplot.rb"
=> true
ruby-1.9.2-p290 :006 > Module.constants.include? :Gnuplot
=> true
Модуль теперь виден переводчику. Он отлично работает снаружи Rails.
vp117025:src tim$ irb -rubygems -r gnuplot
ruby-1.9.2-p290 :001 > Module.constants.include? :Gnuplot
=> true
Почему среда Rails не может загрузить gnuplot.rb, даже если его родительский каталог находится в пути поиска?