2009-08-11 17 views
14

मैं कुछ एक वेब मेजबान जो गहरे लाल रंग का है और कुछ गहरे लाल रंग का रत्न का समर्थन करता है पर काम कर रहा जवाहरात प्राप्त करने के लिए कोशिश कर रहा हूँ, लेकिन नहीं लोगों को मैं जरूरत से कुछ उपयोग करने के लिए।रूबी मणि सूचीबद्ध है, लेकिन अभ्यस्त लोड (उपयोगकर्ता निर्देशिका में मणि, नहीं dir रूबी)

निर्देश मैं here पाया के बाद, मैं अपने मणि रास्ते में मूल मणि स्थान रखा, और कम से/पथ अपने ही जोड़ा/to/मेरी/घर/करने के लिए ~/.gemrc

gemhome: /users/home/myuser/gems 
gempath: 
- /usr/local/lib/ruby/gems/1.8 
- /users/home/mysuser/gems 

मैं जवाहरात कुछ रत्न मैन्युअल रूप से डाउनलोड किया गया है और gem कमांड के --local और --install-dir विकल्पों का उपयोग कर इंस्टॉल किया है। मैंने फिर "मणि सूची" की, और वास्तव में मेरे उपयोगकर्ता निर्देशिका में स्थापित रत्नों को देख सकते हैं, साथ ही सामान्य सिस्टम पथ में मूल रत्न भी देख सकते हैं।

अगर मैं आईआरबी पर लात या एक गहरे लाल रंग का -e करते हैं, सभी सिस्टम जवाहरात ठीक काम करते हैं। हालांकि, मैं करने के मेरे उपयोगकर्ता निर्देशिका स्थापित जवाहरात लोड नहीं कर सकते हैं:

$ ruby -r rubygems -e "require 'nokogiri'" 
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError) 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require' 
    from -e:1 

मैं भी पुराने स्कूल require_gem की कोशिश की: मेरी "जवाहरात सूची" से

$ irb -r rubygems 
irb(main):001:0> require_gem 'nokogiri' 
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0) 

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem' 
    from (irb):1 

मैं देख सकता हूँ:

nokogiri (1.3.3) 
Nokogiri is an HTML, XML, SAX, and Reader parser 

मुझे सभी उपयोगकर्ता-निर्देशिका स्थापित रत्नों के साथ एक ही समस्या है। मुझे यहां क्या समझ नहीं आ रहा है?

संपादित करें: यह एक रेल ऐप नहीं है। यह कमांड लाइन-एप्लिकेशन के लिए है। कार्यक्रम, मेरा उपयोगकर्ता खाता द्वारा निष्पादित किया जाएगा जैसे परीक्षणों में ऊपर दिखाए गए

संपादित करें:। प्रति Rafe के सुझाव, मैं Gem.path पर आईआरबी से देखा। यह केवल सिस्टम मणि पथ, /usr/local/lib/ruby/gems/1.8 सूचीबद्ध करता है, और मेरे उपयोगकर्ता डीआईआर पथ भी नहीं।

+0

जब तुम सिर्फ अभिव्यक्ति "Gem.path" आईआरबी में टाइप क्या दिखाया जाता है? – Rafe

+1

आह, दिलचस्प ... – Matt

उत्तर

38

मैं एक ही समस्या थी, मैं गहरे लाल रंग का के शीर्ष पर निम्न फ़ाइल

require 'rubygems' 

आशा है कि मदद करता है

+0

इसे जोड़ने के लिए 'रूबी फाइल' कहां एक घंटे बिताएं, क्योंकि मेरे पास '-रेल्स' के साथ एक मणि था। अंत में इसे रेल/rails.rb फ़ाइल और जादुई रूप में जोड़ा, यह काम किया –

0

मैं कल्पना समस्या यह है कि वेब अनुप्रयोग एक ही विन्यास है कि आपके उपयोगकर्ता खाते है, शायद इसलिए कि यह किसी अन्य उपयोगकर्ता के रूप में चल रहा है का उपयोग नहीं कर रहा है। एक विकल्प है कि आपके आवेदन में vendor/gems में रत्न लोड करना है।

आपको लगता है कि अपने स्थानीय मशीन rake gems:unpack का उपयोग कर, संस्करण नियंत्रण में उन रत्नों की जांच करें और सर्वर पर उन्हें तैनात कर सकते हैं। यही है, मेरे लिए, सबसे विश्वसनीय दृष्टिकोण। वैकल्पिक रूप से, आप अपने घर की निर्देशिका में रत्नों को देखने के लिए अपने आवेदन की कॉन्फ़िगरेशन बदल सकते हैं।

+0

ऊपर संपादित देखते हैं कि यह वास्तव में एक वेब-ऐप बिल्कुल नहीं है - कोई रेल, आदि मैं एक कमांड लाइन अनुप्रयोग के लिए मणि पुस्तकालयों की जरूरत है। – Matt

+0

एक कमांड ऐप को मेरे उपयोगकर्ताओं के सामान्य वातावरण के साथ भी निष्पादित किया जाना चाहिए - इसलिए कमांड लाइन निष्पादन से त्रुटि दिखाने के ऊपर दिए गए उदाहरण बिल्कुल समस्या हैं। – Matt

+0

मैं सोच रहा था कि यह एक रेल ऐप था या नहीं। – Rafe

5

मेरे वर्तमान कार्यशील (लेकिन आदर्श से कम) समाधान है क्योंकि यह है कि मैं क्या .gemrc की सामग्री को उम्मीद स्वचालित रूप से मेरे लिए ऐसा करने के लिए, सभी के लिए है एक

Gem.path.push "/path/to/my/gems" 

मैं आदर्श से कम कहना क्या करना है मेरे उपयोगकर्ताओं के पर्यावरण के तहत रूबी निष्पादन। यकीन नहीं है कि यह क्यों नहीं करता - लेकिन उपरोक्त कम से कम काम करता है।

0

मैं इस के साथ कुश्ती कर दिया है और कहा कि निर्धारित किया है जोड़कर तय की। gemrc सभी मामलों में लोड नहीं प्रतीत होता है। उदाहरण के लिए, यह रत्न स्थापित करते समय सम्मानित किया जाता है, लेकिन आईआरबी या स्क्रिप्ट/कंसोल चलाने पर जरूरी नहीं है।

मैंने यह भी पाया है कि स्थानीय जरूरत निर्देशिका है कि पथ मैं क्या देखा है कई साइटों पर विवरण से अलग करने के लिए। मेरे लिए निम्नलिखित काम करता है:

--- 
gem: --no-ri --no-rdoc 
gemhome: /home/.gem/ruby/1.8 
gempath: 
- /home/.gem/ruby/1.8 
- /usr/lib/ruby/gems/1.8 
0

मैं एक ऐसी ही समस्या थी है, लेकिन स्वीकार किए जाते हैं जवाब यहाँ जाहिरा तौर पर जाने के लिए (कम से कम यह मेरे लिए नहीं था) तरीका नहीं है। यदि संभव हो, तो आपको मणि फ़ाइलों में ऐसा नहीं करना चाहिए:

require 'rubygems' 

आप क्यों नहीं पूछते? इस लेख को देखो: http://tomayko.com/writings/require-rubygems-antipattern

किसी भी मामले में, तुम बस जब आईआरबी बुला 'rubygems' की आवश्यकता के द्वारा ठीक किया जाना चाहिए:

> irb -r 'rubygems' 

और आप एक ही परिणाम होना चाहिए। निश्चित नहीं है कि इस सवाल के लिए, यह विधि काम नहीं करती है।

संबंधित मुद्दे