आदर्श रूबी परियोजना संरचना


125

मैं रूबी (गैर-रेल / विलय / आदि) परियोजना के लिए आदर्श परियोजना संरचना के अवलोकन / स्पष्टीकरण के बाद हूं। मैं अनुमान लगा रहा हूँ

app/
  bin/                  #Files for command-line execution
  lib/
    appname.rb
    appname/            #Classes and so on
  Rakefile              #Running tests
  README
  test,spec,features/   #Whichever means of testing you go for
  appname.gemspec       #If it's a gem

क्या मुझे कुछ गलत लगा है? मुझे कौन से भाग छूट गए?


1
मैं
योमन

जवाबों:


88

मुझे लगता है कि इस पर बहुत ज्यादा जगह है। डिफ़ॉल्ट रूप से, Rubygems, libpath को लोडपैथ में जोड़ देगा, लेकिन आप उस किसी भी निर्देशिका को धक्का दे सकते हैं जो $: चर का उपयोग कर रही है। अर्थात

$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')

इसका मतलब है कि जब आप कहते हैं, surfer.rbउस डायर में, आप require "surfer"कहीं भी हो सकते हैं और फ़ाइल मिल जाएगी।

इसके अलावा, एक सम्मेलन के रूप में, कक्षाओं और एकलताओं को एक फ़ाइल मिलती है और मॉड्यूल को एक निर्देशिका मिलती है। उदाहरण के लिए, यदि आपके पास LolCatzमॉड्यूल और LolCatz::Moarवर्ग है जो ऐसा दिखेगा:

lib/
  appname.rb
  lolcatz/
    moar.rb

इसीलिए एक lib / appname फोल्डर है क्योंकि ज्यादातर लाइब्रेरी appnameनेमस्पेस में होती हैं।

इसके अतिरिक्त, यदि आप कमांड को चलाने की कोशिश करते हैं newgem --simple [projectname]जो आपको रूबी प्रोजेक्ट के लिए सिर्फ नंगे आवश्यक के साथ (और एक रूबी जेम एक्सटेंशन करके) आपके लिए एक मचान बना देगा। वहाँ अन्य उपकरण हैं जो ऐसा करते हैं, मुझे पता है, लेकिन newgem बहुत आम है। मुझे आमतौर पर TODO फ़ाइल और सभी स्क्रिप्ट सामग्री से छुटकारा मिलता है।


1
मिठाई। मैं newgem के बारे में नहीं जानता था। मेरी गैर-रेल परियोजनाओं ने अक्सर रेल संरचना को प्रतिबिंबित किया है क्योंकि मैंने इसे परिचित पाया है। इस सर्वोत्तम अभ्यास टिप के लिए धन्यवाद।
बेर्लिन.बाब

एक अन्य महत्वपूर्ण फ़ाइल "LICENSE" हो सकती है
ब्लूव्हना

2
मुझे वह व्यवहार नहीं मिलता है जिसे आप libलोडपथ पर स्वचालित रूप से जोड़े जाने के साथ वर्णन करते हैं । क्या यह 1.9 की बात है? ऐसा होने के लिए किसी विशेष विन्यास की आवश्यकता है?
एमिली

5
आप एक रत्न टेम्पलेट उत्पन्न करने के लिए बंडल का उपयोग भी कर सकते हैं। newgem इस टिप्पणी के समय 9 महीने के लिए प्रतिबद्ध नहीं किया गया है। कमान हैbundle gem gem_name
Ninjaxor


6

मैं रेल परियोजना संरचना की नकल करने का प्रयास करता हूं क्योंकि मेरी टीम, जो आमतौर पर रेल के साथ काम करती है, संरचना को दूसरे कॉन्फ़िगरेशन से बेहतर समझेगी। कॉन्फ़िगरेशन पर कन्वेंशन - रेल से रक्तस्राव।


6
यदि कोई बाहरी डेवलपर आपके कोड को देखता है, तो वह आपके व्यक्तिगत कन्वेंशन को देखेगा । मुझे लगता है कि एक मध्यम / बड़ी परियोजना के लिए, पूरी तरह से अलग तरह की परियोजना के लिए अभिसमय के सेट का उपयोग करना और भी भ्रम पैदा कर सकता है। क्या यह एक रेल ऐप, एक रूबी ऐप है? इसे रेल ऐप की तरह क्यों बनाया गया है? "बेहतर होगा कि मैं कुछ तोड़ने से पहले डेवलपर के साथ संपर्क करूं ...?" यह शुरुआत से ही थोड़ा
उपर

मैं @j_ से सहमत हूं। मुझे पता है कि यह थोड़े पुराना है, लेकिन मुझे लगता है कि यह महत्वपूर्ण है कि लोग समझते हैं कि सामुदायिक सम्मेलन क्यों होते हैं। ऐसा है कि आप किसी को सड़क से खींच सकते हैं, वे आपकी परियोजना को देख सकते हैं और क्रैक कर सकते हैं। ऐसा है कि आप कुछ देख सकते हैं और इसे समझ सकते हैं। मुझे लगता है कि डोमेन के सम्मेलनों का उपयोग करना महत्वपूर्ण है। परियोजना विन्यास पर डोमेन सम्मेलन।
वाट्स इनबॉक्‍स

2

यदि आप बंडलर का उपयोग करते हैं, तो यह कमांड चलाने से bundle gem app_nameआपको समान निर्देशिका संरचना मिलेगी।

यदि आप यूनिट परीक्षणों के बजाय rspec का उपयोग करना चाहते हैं तो आप इस कमांड को चला सकते हैं rspec --init (बस यह सुनिश्चित करें कि आप cd app_nameपहले)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.