2015-06-08 3 views
0

Я делаю рубиновый камень с исполняемым файлом и библиотекой классов. Исполняемый файл имеет require "fpa/chklinks", который является библиотекой классов в каталоге lib/fpa.Исполняемый «require» не может найти свою собственную библиотеку

я получаю следующее сообщение об ошибке, когда я запускаю мои исполняемое имя chklinks.rb:

$ bin/chklinks.rb -h 
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- fpa/chklinks (LoadError) 
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from bin/chklinks.rb:7:in `<main>' 

Как я могу сделать это найти свою библиотеку в процессе разработки? Я пробовал require_relative "../lib/fpa/chklinks"

ответ

0

Ваш драгоценный камень должен иметь каталог lib. Во время разработки вам нужно будет получить тот каталог lib, добавленный в путь загрузки Ruby так или иначе.

Вы можете добавить его в код Ruby. Я бы не рекомендовал это делать в вашей ситуации, но это полезно, чтобы положить что-то подобное в вашем тесте-хелперы или вспомогательные файлы спецификации, чтобы помочь тестам найти библиотеку:

$LOAD_PATH << 'lib' 

Вы можете добавить его с Рубином опция командной строки или переменное окружение:

RUBYOPT="-Ilib" ruby bin/chklinks.rb 
ruby -Ilib bin/checklinks.rb 

Я предполагаю, что команды выше, будет выполняться из корневой директории вашего драгоценного камня, так что путь вам нужно добавить просто lib. Если ваша настройка отличается, вы должны изменить lib в приведенных выше командах, чтобы быть каким-то другим путем.

+0

Спасибо за быстрый ответ. Я поместил '$ LOAD_PATH << 'lib'' в свой файл spec_helper.rb. Я все еще получаю ту же ошибку. Я должен что-то упустить. Когда я запускаю пакет, я получаю «Использование fpa-chklinks 0.1.0 from source at.». Означает ли это что-нибудь полезное? – ajnabi

+0

Кроме того, две команды Ilib тоже не работали. Я попробовал 'ruby -Ilib lib/fpa/chklinks.rb', считая, что путь должен быть в моем файле библиотеки. – ajnabi

+0

Очень вероятно, что вы делаете что-то неправильно, поэтому вы должны указать как можно больше деталей, включая сеансы оболочки, которые показывают, где находятся все ваши файлы и какие результаты вы получаете при запуске различных команд. Я думаю, вам следует сосредоточиться на том, чтобы команда 'ruby -Ilib bin/checklinks.rb' работала, и это действительно та команда, которую я думаю вам следует использовать. Дело в том, что вы хотите запустить bin/checklinks.rb, но когда вы запустите его, вы хотите, чтобы ваш каталог lib находился на пути включения. Команда, которую вы отправили в своем последнем комментарии, выглядит не очень хорошо. –

1

Я исправил эту проблему, добавив следующую строку в моей исполняемому выше моих require утверждений:

$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)

или

Согласно сообщению Дэвида Грейсона $LOAD_PATH << 'lib'

Хотя это сделал трюк. Есть ли лучшее место для этого, так как я предполагаю, что мне придется прокомментировать эту строку до производства?

Thanks

+0

Я не думаю, что вы должны добавить такой код в свой исполняемый файл, потому что его нужно будет удалить, прежде чем публиковать их gem.Вы должны использовать опцию '-Ilib' при запуске своего исполняемого файла в режиме разработки, предполагая, что вы используете его с верхнего уровня вашего проекта, и что в каталоге lib есть верхний уровень для файлов библиотеки, предоставленных вашим камнем , –