2008-09-23 15 views
6

Niedawno konwertowane bibliotekę rubinowy do klejnotu, co wydawało się przełamać użyteczność wiersza poleceńCzy przełączniki linii poleceń ruby ​​-rubygems i -r są niekompatybilne?

działało dobrze jako biblioteka

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

I jako gem, IRB umie wymagać gem z poleceniem przełączniki -line

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

Ale sama nie dla samego rubinem:

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

muszę teraz zrobić to, co wydaje się brzydkie:

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

Albo czy jest jakiś sposób, aby uczynić pracę 2 przełączniki?

Uwaga: Znam gem mógł dodać bin/program dla każdej użytecznej metody, ale nie podoba mi się zanieczyszczają nazw wiersza poleceń niepotrzebnie

Odpowiedz

7

-rubygems jest właściwie taka sama jak -R ubygems.

Jeśli chodzi o moją ścieżkę przeszukiwania, nie zadzierza się, ale myślę, że nie dodaje nic do ścieżki -r wyszukiwania. Byłem w stanie zrobić coś takiego:

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

MyHelpfulClass.rb istnieje w podanym wyżej katalogu lib.

Ten rodzaj ssie, ale przynajmniej pokazuje, że możesz mieć wiele dyrektyw -r.

Jako nieco mniej brzydki sposób obejścia, można dodać dodatkowe elementy do ścieżki przeszukiwania biblioteki rubinów (dwukropek ograniczony w * nix, średnik ograniczony w oknach).

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

Jeśli nie chcą zadzierać z zmiennej środowiskowej, można dodać coś do ścieżki obciążenia siebie:

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

Masz rację (obserwuj "ubygems.rb" w ruby ​​/ site_ruby/1,8), ale dlaczego to się nie udaje z 2 wymaganiami? Czy zmienia ścieżkę obciążenia, czy coś? –

+0

Czy wymagany jest przełącznik -rubygems? Czy mogę określić -r MyHelpfulClass bez przełącznika -rubygems? – Donato

0

Uwaga: istnieje problem dla Ruby 1.8, ale został rozwiązany w ruby 1.9.

W wersji 1.8, jeśli podasz obie biblioteki za pomocą -r, ruby ​​spróbuje załadować każdą bibliotekę bez zwracania uwagi na zmiany w $LOAD_PATH. Ale rubygemy zmieniają się $LOAD_PATH, dzięki czemu można znaleźć klejnoty.

Powodem współpracuje z irb że irbrobi zwrócić uwagę na $LOAD_PATH zmian.

Niestety, najlepszym obejście znalazłem jest skorzystanie z formularza bardziej opisowy:

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

Ból nie wzrasta liniowo wraz ze wzrostem liczby bibliotekami choć, jeśli używasz iterator:

Powiązane problemy