2015-01-06 18 views
8

मैं http://guides.rubygems.org/make-your-own-gem/ पर निर्देशों का उपयोग करके रुबी मणि बनाने का प्रयास कर रहा हूं। निम्नलिखित ठीक काम करता प्रतीत होता है और * .gem फ़ाइल जेनरेट की जाती है।रूबी जेम बनाना - ऐसी फ़ाइल लोड नहीं कर सकता

gem build mygem.gemspec 

निम्नलिखित भी (केवल यदि sudo के साथ आरंभ) सफल होने के लिए प्रकट होता है:

LoadError: cannot load such file -- mygem 
:,

sudo gem install mygem-0.0.1.gem 

हालांकि जब मैं require 'mygem' आईआरबी के अंदर करने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है

मैंने स्टैक ओवरफ्लो के आसपास समान त्रुटियां देखी हैं लेकिन मेरी विशिष्ट स्थिति में क्या गलत हो रहा है यह पता लगाने में सक्षम नहीं है। मैं बिना किसी समस्या के अन्य रत्न (मेरा नहीं) की आवश्यकता है। मेरा मणि gem list के आउटपुट में दिखाया गया है लेकिन यह आवश्यकता के साथ लोड नहीं होगा।

FWIW मैं rbenv का उपयोग कर रहा हूं, जो मेरे लिए नया ब्रांड है। 2.1.5 (2014-11-13 Patchlevel 273) [x86_64-darwin14:

  • RubyGems संस्करण:: 2.4.5

    • रूबी संस्करण

      यहाँ gem env के उत्पादन में है .0]

    • स्थापना निर्देशिका: /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

    • रूबी निष्पादन योग्य: /Users/speersj/.rbenv/versions/2.1.5/bin/ruby

    • निष्पादन योग्य निर्देशिका: /Users/speersj/.rbenv/versions/2.1.5/bin

    • कल्पना कैश निर्देशिका: /Users/speersj/.gem/specs

    • सिस्टम विन्यास निर्देशिका: /Users/speersj/.rbenv/versions/2.1.5/etc

    • RubyGems प्लेटफार्म:

    • माणिक

    • x86_64-डार्विन-14

    • जीईएम पथ:

      • /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1। 0

      • /Users/speersj/.gem/ruby/2.1।0

    • जीईएम विन्यास:

      • : update_sources => true

      • : वर्बोज़ => true

      • : पश्व-अनुरेखन => झूठी

      • : bulk_threshold => 1000

    • दूरस्थ स्रोतों:

    • शेल पथ:

      • /Users/speersj/.rbenv/versions/2.1.5/bin

      • /Users/speersj/.rbenv/libexec

      • /Users/speersj/.rbenv/plugins/ruby-build/bin

      • /Users/speersj/.rbenv/shims

      • /Users/speersj/.rbenv/bin

      • /Library/Frameworks/Python.framework/Versions/3।4/बिन

      • /usr/स्थानीय/बिन

      • /usr/स्थानीय/sbin

      • /usr/स्थानीय/Heroku/bin

      • /usr/स्थानीय/बिन

      • /usr/bin

      • /bin

      • /usr/sbin

      • /sbin

      • /usr/स्थानीय/बिन

      • /usr/स्थानीय/smlnj/bin

जेम्सस्पेक:

Gem::Specification.new do |spec| 
    spec.name  = 'mygem' 
    spec.version  = '0.0.1' 
    spec.date  = '2015-01-05' 
    spec.summary  = "mygem" 
    spec.description = "Attempting to build a gem" 
    spec.authors  = ["speersj"] 
    spec.email  = # my email here 
    spec.files  = ['lib/command.rb', 'lib/connection.rb'] 
    spec.homepage = '' 
    spec.license  = 'MIT' 
end 
+0

आपके 'lib' dir की सामग्री क्या हैं?क्या आपके मणि में 'mygem' नाम की एक फाइल है? – matt

+0

lib में कुछ फाइलें हैं जो कक्षाओं को परिभाषित करती हैं और इसमें mygem.rb फ़ाइल भी शामिल होती है जिसके लिए बाकी फ़ाइलों को lib में आवश्यकता होती है। – speersj

+0

'सूडो' के बिना मणि स्थापित करने का प्रयास करें? –

उत्तर

13

spec.files आपके gemspec की प्रविष्टि में mygem.rb फ़ाइल शामिल नहीं है, ताकि फ़ाइल बनाई जाने पर मणि में नहीं होगी। इस प्रविष्टि में सूचीबद्ध फाइलें अंतिम मणि में शामिल की जाएंगी।

सरल समाधान सिर्फ सरणी mygem.rb जोड़ने के लिए होगा:

spec.files = Dir['lib/**/*.rb'] 
:

spec.files = ['lib/command.rb', 'lib/connection.rb', 'lib/mygem.rb'] 

यह एक काफी सरल ठीक है, तो आप एक Dir glob का उपयोग कर की तरह और अधिक लचीला कुछ करना चाहते हो सकता है

वास्तव में Rubygems guide suggests you do something like this (पाठ उस खंड के अंत से है):

If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe , Jeweler , Rake , Bundler , or just a dynamic gemspec .


इसके अलावा, आप वास्तव में अपने permissions problem ठीक करने के लिए, आप अपने खुद के घर निर्देशिका में जवाहरात स्थापित करने के लिए sudo आवश्यकता नहीं होनी चाहिए की क्या ज़रूरत है।

+0

धन्यवाद, मैं पूरी तरह से सबसे स्पष्ट फ़ाइल जोड़ने से चूक गया! अब से Dir glob। आपको सही दिशा में मुझे इंगित करने में मदद करने की सराहना करें: सुडो का उपयोग करने के लिए अनुमतियां मेरे लिए सही नहीं लगतीं। – speersj

2

आप sudo उपयोग नहीं कर सकते जब rbenv (या RVM) का उपयोग कर एक रत्न स्थापित करने के लिए, "बहु उपयोगकर्ता" या "सिस्टम-वाइड" प्रकार प्रतिष्ठानों जो बहुत ही कम और विशेष कर रहे हैं के अलावा क्या सामान्य/नियमित उपयोगकर्ताओं का उपयोग करना चाहिए।

sudo आपके विशेषाधिकारों को रूट में बढ़ा देता है, और रूट को उपयोगकर्ता के आरबीएनवी वातावरण में रूबी का कोई ज्ञान नहीं है। नतीजतन, रूट डिफ़ॉल्ट सिस्टम रूबी का उपयोग करेगा, जो वहां फ़ाइलों को स्थापित करेगा।

इसके बजाय, मूल gem install का उपयोग करें, जो सही काम करेगा।

0

सुनिश्चित करें कि आपने अपने मणि बनाने से पहले सभी संशोधित फ़ाइलों को जिथब रेपो में जोड़ा है और फिर बिल्ड मणि इंस्टॉल करें।

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