2008-09-23 10 views
6

मैं हाल ही में एक रत्न है, जो आदेश पंक्ति प्रयोज्यरूबी कमांड लाइन स्विच-रुब्यगेम्स और -आर असंगत हैं?

एक पुस्तकालय

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

के रूप में और एक रत्न के रूप में ठीक काम किया तोड़ने के लिए लग रहा था करने के लिए एक गहरे लाल रंग का पुस्तकालय परिवर्तित, आईआरबी जानता है कि कैसे आदेश से एक रत्न की आवश्यकता होती है ऑन लाइन

$ 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 स्विच काम करने के लिए एक तरीका है?

नोट: मैं मणि हर उपयोगी विधि के लिए एक bin/कार्यक्रम जोड़ सकता है पता है, लेकिन मैं कमांड लाइन नाम स्थान अनावश्यक रूप से

उत्तर

7

-rubygems वास्तव में -r ubygems रूप में ही है अपवित्र करना पसंद नहीं है।

जहां तक ​​मैं समझता हूं, यह आपके खोज पथ से गड़बड़ नहीं करता है, लेकिन मुझे लगता है कि यह आपके-खोज पथ में कुछ भी नहीं जोड़ता है।

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

MyHelpfulClass.rb ऊपर निर्दिष्ट lib निर्देशिका में मौजूद है: मैं इस तरह कुछ करने के लिए कर रहा था।

उस तरह का बेकार है, लेकिन कम से कम यह दर्शाता है कि आपके पास एकाधिक-समकक्ष निर्देश हो सकते हैं।

थोड़ा कम बदसूरत कामकाज के रूप में, आप रूबी लाइब्रेरी सर्च पथ (* निक्स में सीमित * कोलन, विंडोज़ में सीमित अर्धविराम) में अतिरिक्त आइटम जोड़ सकते हैं।

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

आप सही (गहरे लाल रंग का/site_ruby/1.8 में 'ubygems.rb' निरीक्षण) कर रहे हैं, लेकिन फिर यह क्यों असफल है के साथ 2 की आवश्यकता है? क्या यह लोड पथ या कुछ बदलता है? –

+0

-rubygems यहाँ आवश्यक स्विच है? क्या मैं -Rubygems स्विच के बिना-MyHelpfulClass निर्दिष्ट कर सकता हूं? – Donato

0

नोट: गहरे लाल रंग का 1.8 के लिए इस समस्या मौजूद है, लेकिन में हल हो गई है रूबी 1.9।

1.8 पर, यदि आप -r के माध्यम से दोनों libs निर्दिष्ट करते हैं, तो रूबी $LOAD_PATH में परिवर्तनों पर ध्यान दिए बिना प्रत्येक लाइब्रेरी को लोड करने का प्रयास करेगा। लेकिन rubygems $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 }' 
संबंधित मुद्दे