Ruby требует пути
У меня есть код Ruby с разными классами в нескольких файлах. В одном файле я запускаю выполнение. Этот файл require
мои другие файлы.
- Это хороший способ запустить рубиновый код?
- Когда я запускаю код из символической ссылки, например,
DIR2/MyRubyCode
является ссылкой на основной файл DIR1/MyRubyCode.rb
, тогда мои запросы будут сбой. Я решил проблему, добавив путь DIR1
в $LOAD_PATH
до require
, но я думаю, что было бы намного лучше сделать это. У вас есть какие-либо предложения по этому поводу?
Ответы
Ответ 1
Если вы хотите проверить, является ли файл Ruby "require
" ed или выполнен с помощью "ruby MyRubyCode.rb
", проверьте константу __FILE__
.
# If the first argument to `ruby` is this file.
if $0 == __FILE__
# Execute some stuff.
end
Что касается проблемы require/$LOAD_PATH, вы всегда можете использовать относительный путь в инструкции require. Например:
# MyRubyCode.rb
require "#{File.dirname(__FILE__)}/foo_class"
require "#{File.dirname(__FILE__)}/bar_module"
Что будет включать файлы foo_class.rb
и bar_module.rb
в том же каталоге, что и MyRubyCode.rb
.
Ответ 2
Если вы используете Ruby версии 1.9 или выше, пользователю требуется относительная для ваших зависимостей.
require_relative 'foo_class'
require_relative 'bar_module'
Ответ 3
Я знаю, что это старый вопрос, но есть обновленный ответ на него, и я хотел бы опубликовать его:
Начиная с более поздней версии Ruby (я не уверен, когда), вы можете потребовать файлы в том же каталоге, используя следующее:
require './foo_class'
require './bar_module'
и он загрузит файлы с именем foo_class.rb
и bar_module.rb
в тот же каталог.
Для проверки того, был ли ваш файл require
d или запущен нормально, проверьте другой ответ.