2012-03-03 16 views
83

मैं 10-20 कक्षाओं/फ़ाइलों के साथ एक छोटी रूबी परियोजना बनाना चाहता हूं। मुझे कुछ रत्न चाहिए और मैं टेस्ट फ्रेमवर्क के रूप में rspec का उपयोग करना चाहता हूं।मूल रूबी परियोजना कैसे सेट करें?

मैं बाद में एक मणि बनाना चाहता हूं, लेकिन यह निश्चित नहीं है।

क्या कोई हाउटो या गाइड है जो मुझे दिखाता है कि मेरी परियोजना की बुनियादी संरचना कैसे स्थापित करें?

सवाल मेरे पास है कि कर रहे हैं:

  • मैं कहां से मेरे सभी कस्टम त्रुटियाँ/अपवाद
  • रखूँ वहाँ कुछ lib, बिन, src आदि जैसे निर्देशिका के नामकरण के लिए वहाँ बाहर सम्मेलनों?
  • मैं परीक्षण डेटा या दस्तावेज़ कहां रखूं।
  • मुझे अपनी सभी फाइलों की आवश्यकता कहां है, इसलिए मेरे पास मेरे प्रोजेक्ट में उनकी पहुंच है।

मुझे पता है कि मैं सबकुछ खरोंच से कर सकता हूं, लेकिन मुझे कुछ मार्गदर्शन चाहिए। वहाँ कुछ अच्छे रत्न हैं जो मैं कॉपी कर सकता हूं, लेकिन मुझे यकीन नहीं है कि मुझे वास्तव में क्या चाहिए और मैं क्या हटा सकता हूं।

मैंने http://gembundler.com/ पर देखा, लेकिन यह बंडलर स्थापित करने के बाद बंद हो जाता है।

+2

संबंधित प्रश्न: http://stackoverflow.com/questions/614309/ideal-ruby-project- संरचना –

उत्तर

129

अच्छी शुरुआत करने के लिए, आप bundle gem कमांड और rspec --init का उपयोग कर सकते हैं।

~/code $ bundle gem my_lib 
     create my_lib/Gemfile 
     create my_lib/Rakefile 
     create my_lib/LICENSE.txt 
     create my_lib/README.md 
     create my_lib/.gitignore 
     create my_lib/my_lib.gemspec 
     create my_lib/lib/my_lib.rb 
     create my_lib/lib/my_lib/version.rb 
Initializating git repo in /Users/john/code/my_lib 
~/code $ cd my_lib/ 
~/code/my_lib $ git commit -m "Empty project" 
~/code/my_lib $ rspec --init 
The --configure option no longer needs any arguments, so true was ignored. 
    create spec/spec_helper.rb 
    create .rspec 
  • कोड चला जाता है में lib
  • चश्मा spec
  • परीक्षण डाटा में जाना या दस्तावेजों spec/fixtures/
  • में जाना lib/my_lib.rb में अपने सभी माणिक फ़ाइलों की आवश्यकता होती है। आप अपने अपवादों को परिभाषित कर सकते हैं जो फ़ाइल, भी, या अपनी फाइलों में - अपनी पसंद के अनुसार।
  • सी स्रोत फ़ाइलों ext/my_lib
  • शेल स्क्रिप्ट में जाने के लिए और निष्पादनयोग्य bin

संदेह होने में, बस कैसे अन्य रत्नों से बाहर रखा जाता है पर देखने चलते हैं।


अधिक जानकारी:

आप rspec एक विकास निर्भरता के रूप में अपने gemspec में बातें अन्य डेवलपर्स

  1. संपादित my_lib.gemspec, पास gem.add_development_dependency 'rspec' और gem.add_development_dependency 'rake' जोड़ने के लिए आसान बनाने के लिए जोड़ना चाहिए तल।
  2. spec/spec_helper.rb के शीर्ष पर Bundler.setup और require 'my_lib' जोड़ें ताकि यह सुनिश्चित किया जा सके कि जब आप अपने चश्मा चलाते हैं तो आपके मणि निर्भरताएं लोड हो जाती हैं।
  3. require "rspec/core/rake_task" और task :default => :spec को अपने रेकैकाइल में जोड़ें, ताकि rake चलने से आपकी चश्मा चलें।

आप अपने नवीनतम निर्माण पर काम कर रहे हैं, guard-rspec आप समय और परेशानी से स्वचालित रूप से फ़ाइलों को बदलने के रूप में अपने चश्मा चल बचा सकता है, विफलताओं विशिष्ट जानकारी के अनुसार आपको सचेत करेगा।

~/code/my_lib $ git add spec/spec_helper.rb 
~/code/my_lib $ git commit -am "Add RSpec" 
~/code/my_lib $ vim my_lib.gemspeC# add guard development dependency 
~/code/my_lib $ bundle 
~/code/my_lib $ bundle exec guard init 
~/code/my_lib $ vim Guardfile # Remove the sections below the top one 
~/code/my_lib $ git add Guardfile 
~/code/my_lib $ git commit -am "Add Guard" 

के बाद आप अपनी रचना के साथ खुश हैं, तो

# create a github repository for your gem, then push it up 
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin [email protected]:myusername/my_lib.git 
~/code/my_lib $ git push 

GitHub को धक्का अप, जब आप Rubygems.org पर अपने मणि जारी करने के लिए तैयार हैं, rake release चलाते हैं, जो चलते हैं आप चरणों के माध्यम से।

~/code/my_lib $ rake release 

आगे संदर्भ

+1

आप '-b, [--bin = अपनी लाइब्रेरी के लिए बाइनरी जेनरेट कर सकते हैं।]' 'बंडल के साथ gem'। –

+0

आप 'rspec --init' के बराबर करने के लिए 'बंडल मणि -t' का उपयोग भी कर सकते हैं। – pioto

+1

रूबी परियोजना को कैसे कार्यान्वित करें। मैंने छात्र शिक्षक समय सारिणी के लिए एक कंसोल आधारित रूबी परियोजना बनाई है। सुनिश्चित नहीं है कि इसे कैसे निष्पादित किया जाए ?? – rAzOr

6

यहाँ सम्मेलनों मैं सबसे अधिक बार देखा है (अपनी परियोजना का नाम यह सोचते हैं "foo" है):

  • /lib/foo.rb - परियोजना और उसके संस्करण के शीर्ष-स्तरीय नाम स्थान को परिभाषित करता है; आवश्यक फाइलों की आवश्यकता है।
  • /lib/foo/- त्रुटि से संबंधित कक्षाओं सहित आपकी परियोजना के लिए सभी कक्षाएं शामिल हैं।
  • /परीक्षण/- आपके प्रोजेक्ट के लिए परीक्षण शामिल हैं।
  • /spec/- आपके प्रोजेक्ट के लिए चश्मे शामिल हैं।
  • /बिन/- यदि आपकी परियोजना द्विआधारी (जेएआर फाइलें, आदि) पर निर्भर करती है, तो वे आमतौर पर वहां जाते हैं।

lib/के अंदर, सम्मेलन आम तौर पर आपके शीर्ष-स्तरीय नामस्थान के अंदर प्रत्येक उप-नामस्थान के लिए एक फ़ोल्डर बनाने के लिए होता है। उदाहरण के लिए, कक्षा Foo :: Bar :: Baz आमतौर पर /lib/foo/bar/baz.rb के अंतर्गत पाई जाती है।

कुछ लोग केवल Foo :: VERSION स्थिर सेट करने के लिए /lib/foo/version.rb फ़ाइल बनाना पसंद करते हैं, लेकिन अक्सर मैंने इसे /lib/foo.rb फ़ाइल में परिभाषित किया है।

इसके अलावा, अगर आप एक मणि पैदा कर रहे हैं, तो आप निम्न फ़ाइलों की आवश्यकता होगी:

  • /Rakefile - परिभाषित करता है (जैसे परीक्षण, निर्माण और मणि को आगे बढ़ाने के लिए कार्य के रूप में) रेक कार्य।
  • /जेमफाइल - मणि के स्रोत को परिभाषित करता है (अन्य संभावित चीजों के साथ)।
  • /foo.gemspec - आपके मणि का वर्णन करता है और निर्भरताओं की एक सूची प्रदान करता है।
10

हैं

  • Exercise 46: A Project Skeleton जेड से some nice guides at rubygems.org कि सम्मेलनों और से परिचित कराएगा रहे उनमें से कुछ के पीछे तर्क। आम तौर पर, Rubygems naming and directory conventions के बाद अधिकांश रूबी डेवलपर्स होते हैं।

    यदि मैं मानक लाइब्रेरी में कोई भी वर्ग नहीं ढूंढ पा रहा हूं तो मैं केवल कस्टम अपवाद वर्ग बनाएगा यदि त्रुटि त्रुटि फिट बैठता है। नेस्ट वर्ग या मॉड्यूल है कि यह उठता है के तहत अपने त्रुटि वर्ग: अगर आप Test::Unit उपयोग कर रहे हैं, या /spec में आप RSpec उपयोग कर रहे हैं

    class Parser::Error < RuntimeError; end 
    
    begin 
        Parser.new(:invalid).parse! 
    rescue Parser::Error => e 
        puts e.message 
    end 
    

    ईकाई परीक्षण /test में या तो जाना है,। मैं बाद वाले की सिफारिश करता हूं।

    Bundler आपके लोड पथ को प्रबंधित करने का एक शानदार तरीका है। यह स्वचालित रूप से Gemfile और वैकल्पिक रूप से gemspec पर निर्दिष्ट निर्भरताओं के साथ आपके पर्यावरण को स्थापित करेगा। यह आपको आसानी से require अपने कोड को मणि बनाने के बिना अनुमति देता है।

    हालांकि, बाद से आप भविष्य में एक रत्न में अपने कोड बंडल सकता है, मैं how to create gem specifications की जांच कर रही सलाह देते हैं। आपको अपना विनिर्देश मैन्युअल रूप से लिखना चाहिए। स्वचालित रूप से इसे उत्पन्न करने के लिए कुछ टूल का उपयोग न करें - वे मेरी राय में, ब्रूट फोर्स दृष्टिकोण हैं जो स्रोत नियंत्रण के साथ उपयोग किए जाने पर अनावश्यक रूप से डुप्लिकेट जानकारी और डरावना विनाश करते हैं।

    I created a gem जो आपको उपयोगी मिल सकता है। एक gemspec फ़ाइल को देखते हुए यह, अपने मणि है, जो निर्माण के लिए कार्य शामिल हैं के साथ काम करने को स्थापित करने और rubygems करने के लिए अपने मणि और स्वचालित संस्करण टैगिंग के साथ git भंडार को रिहा करने के लिए कई उपयोगी Rake कार्यों को परिभाषित करता है। यह irb या pry सत्र में अपना कोड लोड करने का एक आसान तरीका भी प्रदान करता है।

    # Rakefile 
    require 'rookie' 
    
    # Run `rake -T` for the complete task list 
    Rookie::Tasks.new('your_gem.gemspec').define_tasks! 
    
  • 4

    रूबी परियोजना को कैसे विकसित किया जाए, इस बारे में इंटरनेट पर कुछ गाइड हैं। इसके अलावा, मुझे लगता है कि इसे हल करने का सबसे अच्छा तरीका जिथब पर जा रहा है और कुछ प्रसिद्ध रूबी परियोजना की तलाश में है, और "उनके" संरचनाओं की जांच करें।

    सामान्य माणिक रत्न आवश्यकताओं इसके अलावा, मैं बेहतर कार्यप्रवाह के लिए निम्नलिखित उपकरणों की सिफारिश:

    • editorconfig, डेवलपर की सहायता करती परिभाषित करने और विभिन्न संपादकों और IDEs के बीच संगत कोडिंग शैलियों बनाए रखें।
    • rubocop, रूबी के लिए स्थिर कोड विश्लेषक, रूबी समुदाय में लिटर के लिए defac।
    • guard, प्लगइन के समूह के साथ, आप कोड को बदलते समय स्वचालित रूप से किसी भी आदेश को चला सकते हैं।
    • rake, जैसे विभिन्न परियोजना कार्य, के लिए सार्वभौमिक चालक:
      • package: निर्माण मणि पैकेज
      • clean: स्वच्छ उत्पन्न फ़ाइलों
      • test: रन परीक्षण
    • yard, लोकप्रिय रूबी दस्तावेज उपकरण।

    और इसके बाद के संस्करण उपकरणों के सभी के अलावा, their're रूबी परियोजना के लिए कुछ ऑनलाइन सेवा:

    और आप अपने ओपन सोर्स प्रोजेक्ट के लिए http://shields.io/ के माध्यम से भी genearate बैज कर सकते हैं।

    यह मेरा अनुभव है, उम्मीद है कि यह किसी के लिए मदद करता है।

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