2008-09-11 15 views
19

के लिए निर्देशिका लेआउट मैं रूबी सीखना शुरू कर रहा हूं। मैं दिन-प्रतिदिन सी ++ देव भी हूं। सी ++ परियोजनाओं मैं आमतौर पर निम्नलिखित निर्देशिका संरचनाशुद्ध रूबी परियोजना

/ 
-/bin <- built binaries 
-/build <- build time temporary object (eg. .obj, cmake intermediates) 
-/doc <- manuals and/or Doxygen docs 
-/src 
--/module-1 
--/module-2 
-- non module specific sources, like main.cpp 
- IDE project files (.sln), etc. 

क्या रूबी (गैर रेल, गैर MerB) के लिए निर्देशिका लेआउट आप इसे स्पष्ट, आसान और पोषणीय रखने के लिए सुझाव है कि के साथ जाने के लिए?

+1

नवीनतम न्यूजम बहुत कम क्रुफ़्ट पैदा करता है जो अच्छा है। –

उत्तर

11

आप newgem RubyGem स्थापित कर सकता है और यह आपके लिए लेआउट उत्पन्न करते हैं।

$ gem install newgem 
$ newgem spider 
     create 
     create config 
     create doc 
     create lib 
     create script 
     create tasks 
     create lib/spider 
     create History.txt 
     create License.txt 
     create Rakefile 
     create README.txt 
     create PostInstall.txt 
     create setup.rb 
     create lib/spider.rb 
     create lib/spider/version.rb 
     create config/hoe.rb 
     create config/requirements.rb 
     create tasks/deployment.rake 
     create tasks/environment.rake 
     create tasks/website.rake 
    dependency install_test_unit 
     create test 
     create test/test_helper.rb 
     create test/test_spider.rb 
    dependency install_website 
     create website/javascripts 
     create website/stylesheets 
     exists script 
     exists tasks 
     create website/index.txt 
     create website/index.html 
     create script/txt2html 
     force tasks/website.rake 
    dependency plain_theme 
     exists  website/javascripts 
     exists  website/stylesheets 
     create  website/template.html.erb 
     create  website/stylesheets/screen.css 
     create  website/javascripts/rounded_corners_lite.inc.js 
    dependency install_rubigen_scripts 
     exists script 
     create script/generate 
     create script/destroy 
     create script/console 
     create Manifest.txt 
     readme readme 
Important 
========= 

* Open config/hoe.rb 
* Update missing details (gem description, dependent gems, etc.) 

फिर, lib/में, आप मॉड्यूल की जरूरत के रूप में बनाने के लिए:

lib/ 
    spider/ 
    base.rb 
    crawler/ 
    base.rb 
    spider.rb 
    require "spider/base" 
    require "crawler/base" 
1

क्यों एक ही लेआउट का उपयोग नहीं करते? आम तौर पर आपको निर्माण की आवश्यकता नहीं होगी क्योंकि कोई संकलन चरण नहीं है, लेकिन शेष मेरे लिए ठीक लगता है।

मुझे यकीन नहीं है कि आप मॉड्यूल द्वारा क्या मतलब रखते हैं लेकिन यदि यह केवल एक वर्ग है तो एक अलग फ़ोल्डर आवश्यक नहीं होगा और यदि एक से अधिक फाइलें हैं तो आप आमतौर पर मॉड्यूल-1. आरबी फ़ाइल लिखते हैं (पर मॉड्यूल -1 फ़ोल्डर के रूप में नाम स्तर) जो मॉड्यूल -1/में सबकुछ की आवश्यकता से अधिक कुछ नहीं करता है।

ओह, और मैं प्रबंधन कार्यों (बनाने के बजाय) के लिए Rake का उपयोग करने का सुझाव दूंगा।

2

@Dentharg: आपके "सभी उप-भागों को शामिल करने के लिए शामिल करें" एक आम पैटर्न है। किसी भी चीज़ की तरह, इसमें इसके फायदे हैं (जो चीजें आप चाहते हैं उन्हें पाने में आसान) और इसके नुकसान (कई शामिल हैं नामस्थानों को प्रदूषित कर सकते हैं और आपके ऊपर उनका कोई नियंत्रण नहीं है)। आपका पैटर्न इस तरह दिखता है:

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.do_something 

+ doc/ 

- lib/ 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      # anything that needs to be done before including submodules 
     end 

     require 'spider/some_helper' 
     require 'spider/some/other_helper' 
     ... 

मैं इस एक छोटे से अधिक नियंत्रण की अनुमति के लिए सिफारिश कर सकता है:

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.include_all 
     Spider.do_something 

+ doc/ 

- lib 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      def self.include_all 
      require 'spider/some_helper' 
      require 'spider/some/other_helper' 
      ... 
      end 
     end 
0

मैं करने के लिए कुछ इसी तरह से चिपके हैं क्या आप के साथ परिचित हैं: कोई मतलब नहीं अपनी परियोजना निर्देशिका में एक अजनबी की जा रही है । :-)

विशिष्ट चीजें जो मेरे पास हमेशा हैं lib | src, bin, test।

(मैं इन राक्षस जनरेटर नापसंद: पहली बात मैं एक नई परियोजना के साथ क्या करना चाहते हैं कुछ कोड नीचे लाने के लिए, एक README, डॉक्स, आदि नहीं लिख है)

0

तो मैं newgem साथ चला गया। मैंने सभी अनावश्यक रूबीफोर्ज/मणि सामान (घुड़सवार, सेटअप इत्यादि) हटा दिया, गिट रेपो बनाया, नेटबीन में आयातित परियोजना बनाई। सभी ने 20 मिनट लिया और सब कुछ हरे रंग पर है। उसने मुझे spec फ़ाइलों के लिए एक मूल रेक कार्य भी दिया।

सभी को धन्यवाद।

20

2011 तक, न्यूजम के बजाय jeweler का उपयोग करना आम है क्योंकि बाद में प्रभावी रूप से त्याग दिया जाता है।

+16

या बंडलर। एक नया मणि बनाने के लिए आपको "बंडल मणि रत्न" देता है। –

10

एक मानक रूबी परियोजना के मूल संरचना मूल रूप से है:

lib/ 
    foo.rb 
    foo/ 
    share/ 
    foo/ 
    test/ 
    helper.rb 
    test_foo.rb 
    HISTORY.md (or CHANGELOG.md) 
    LICENSE.txt 
    README.md 
    foo.gemspec 

share/ दुर्लभ है और कभी कभी है बजाय data/ कहा जाता है। यह सामान्य उद्देश्य गैर-रूबी फाइलों के लिए है।अधिकांश परियोजनाओं को इसकी आवश्यकता नहीं होती है, लेकिन जब भी वे कई बार करते हैं तब भी सब कुछ lib/ में रखा जाता है, हालांकि यह शायद सबसे अच्छा अभ्यास नहीं है।

test/ निर्देशिका spec/ कहा जा सकता है, तो BDD TDD के बजाय प्रयोग किया जा रहा है, हालांकि आप भी features/ अगर ककड़ी प्रयोग किया जाता है, या demo/ देख सकते हैं यदि QED प्रयोग किया जाता है।

इन दिनों foo.gemspec केवल .gemspec हो सकता है - खासकर अगर इसे मैन्युअल रूप से बनाए रखा नहीं जाता है।

अपनी परियोजना कमांड लाइन निष्पादनयोग्य है, तो जोड़ें:

bin/ 
    foo 
    man/ 
    foo.1 
    foo.1.md or foo.1.ronn 

इसके अलावा, ज्यादातर रूबी परियोजना के होते हैं:

Gemfile 
    Rakefile 

Gemfile Bundler उपयोग करने के लिए है, और Rakefile रैक के लिए है निर्माण उपकरण। लेकिन यदि आप विभिन्न टूल्स का उपयोग करना चाहते हैं तो अन्य विकल्प भी हैं।

कुछ अन्य नहीं-तो-असामान्य फ़ाइलें:

VERSION 
    MANIFEST 

VERSION फ़ाइल सिर्फ वर्तमान संस्करण संख्या में शामिल हैं। और MANIFEST (या Manifest.txt) में प्रोजेक्ट की पैकेज फ़ाइल (उदा। मणि पैकेज) में शामिल फ़ाइलों की एक सूची शामिल है।

और क्या आप देख सकते हैं, लेकिन उपयोग छिटपुट है:

config/ 
    doc/ (or docs/) 
    script/ 
    log/ 
    pkg/ 
    task/ (or tasks/) 
    vendor/ 
    web/ (or site/) 

कहाँ config/ विभिन्न विन्यास फाइल शामिल है; doc/ में या तो जेनरेट किए गए दस्तावेज़ हैं, उदा। आरडीओसी, या कभी-कभी मैन्युअल रूप से रखरखाव दस्तावेज; script/ में परियोजना द्वारा उपयोग के लिए खोल स्क्रिप्ट शामिल हैं; log/ में जेनरेट किए गए प्रोजेक्ट लॉग हैं, उदा। परीक्षण कवरेज रिपोर्ट; pkg/ जेनरेट की गई पैकेज फाइलें रखती है, उदा। foo-1.0.0.gem; task/foo.rake या foo.watchr जैसी विभिन्न कार्य फ़ाइलों को पकड़ सकता है; vendor/ में अन्य परियोजनाओं की प्रतियां शामिल हैं, उदा। गिट submodules; और अंत में web/ में प्रोजेक्ट की वेबसाइट फ़ाइलें शामिल हैं।

फिर कुछ उपकरण विशिष्ट फ़ाइलों कि भी अपेक्षाकृत काफी आम हैं:

.document 
    .gitignore 
    .yardopts 
    .travis.yml 

वे काफी स्वतः स्पष्ट हैं।

अंत में, मैं जोड़ देगा कि मैं व्यक्तिगत रूप से एक .index फाइल और एक var/ निर्देशिका है कि फाइल का निर्माण करने के लिए जोड़ ("Rubyworks अनुक्रमणिका" के लिए खोज के बारे में अधिक के लिए) और अक्सर एक work निर्देशिका, कुछ की तरह:

work/ 
    NOTES.md 
    consider/ 
    reference/ 
    sandbox/ 

विकास उद्देश्यों के लिए बस एक प्रकार का स्काइपर्ड।

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