Зависит от того, какую версию Ruby вы используете.
В 1.8 он должен работать как вы. В 1.9 вы должны использовать require_relative
.
Вы также не должны добавлять '.rb' в конце, это не рекомендуется.
Опасность простого 'require' с относительным путем состоит в том, что если этот сценарий сам по себе требуется другим, тогда путь будет относительно первого сценария с именем:
rootdir
- main.rb
- subdir1
- second.rb
- subdir11
- third.rb
Если вызывается main.rb, а затем требуется second.rb (с 'subdir1/second'
), а затем требуется третий.rb с 'subdir11/third.rb'
, он не будет работать.
Вы можете относиться к первому сценарию (subdir1/subdir11/third.rb
), но это не очень хорошая идея.
Вы можете использовать __FILE__
, а затем сделать его абсолютным путем:
требуют File.expand_path ('../ subdir11 / third.rb', FILE )
(первый .. должен попасть в каталог, содержащий файл) или
требуется File.dirname ( FILE ) + '/subdir11/third.rb'
Но наиболее распространенная практика - ссылаться на нее из корневого каталога.
В геме вы можете предположить, что rootdir будет в $LOAD_PATH
(или вы можете добавить его самостоятельно).
В Rails вы можете использовать require "#{RAILS_ROOT}/path"
(rails2) или
require Rails.root.join('path')
(rails3)