Переключатели командной строки ruby ​​-rubygems & -r несовместимы?


6

Я недавно переделал библиотеку рубиновый с драгоценным камнем, который, казалось, нарушить удобство использования командной строки

прекрасно работали как библиотека

$ ruby -r foobar -e 'p FooBar.question' # => "answer" 

И как драгоценный камень, IRB знает, как требует драгоценный камень из команды -линии переключатели

$ irb -rubygems -r foobar 
    irb(main):001:0> FooBar.question # => "answer" 

Но тот же не выполняется для самого рубина:

$ ruby -rubygems -r foobar -e 'p FooBar.question' 
    ruby: no such file to load -- foobar (LoadError) 

должен я теперь сделать это, что кажется некрасиво:

ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer" 

Или есть способ сделать работу 2 переключателей?

Примечание: Я знаю, что драгоценный камень может добавить бен/программу для каждого полезного метода, но я не хотел загрязнять пространство имен командной строки неоправданно

7

-rubygems на самом деле так же, как -r ubygems.

Это, как я понимаю, не путается с вашим путем поиска, но я думаю, что он ничего не добавляет к вашему пути поиска -r. Я был в состоянии сделать что-то вроде этого:

ruby -rubygems -r /usr/lib/ruby/gems/myhelpfulclass-0.0.1/lib/MyHelpfulClass -e "puts MyHelpfulClass" 

MyHelpfulClass.rb существует в Lib каталоге, указанном выше.

Этот вид отстой, но он хотя бы демонстрирует, что вы можете иметь несколько директив -r equire.

Как немного менее уродливое обходное решение, вы можете добавить дополнительные элементы в путь поиска библиотеки ruby ​​(двоеточие, разделенное на * nix, точка с запятой, ограниченная в окнах).

export RUBYLIB=/usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib 
ruby -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass" 

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

ruby -I /usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib \ 
    -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass" 
  0

Вы правы (соблюдайте 'ubygems.rb' в ruby ​​/ site_ruby/1.8), но тогда почему это происходит с ошибкой 2? Изменяет ли он путь загрузки или что-то еще? 23 сен. 082008-09-23 21:44:43

  0

Здесь нужен выключатель -rubygems? Могу ли я указать -r MyHelpfulClass без переключателя -rubygems? 07 июн. 162016-06-07 01:11:24


0

Примечание: эта проблема существует для Ruby 1.8, но будет решена в рубин 1.9.

На 1.8, если вы укажете обе библиотеки с помощью -r, ruby ​​попытается загрузить каждую библиотеку, не обращая внимания на изменения в $LOAD_PATH. Но рубигемы меняют $LOAD_PATH, поэтому драгоценные камни можно найти.

Причина она работает с irb что irbделает обратить внимание на $LOAD_PATH изменений.

К сожалению, лучший обходной путь я нашел, чтобы использовать более подробный вид:

ruby -rubygems -e 'require "foobar"; p FooBar.question' 

Боль изменяется нелинейно не увеличивается с числом LIBS, хотя, если вы используете итератор:

ruby -rubygems -e '%w(rake rspec).each{|r| require r }'