रूबी रेल्स डाउनसाइड्स और कैविट्स पर [बंद]


25

यह RoR को कोसने के लिए एक उद्घाटन जुआ नहीं है - ईमानदार!

मैं रूबी और रेल्स फ्रेमवर्क सीख रहा हूं। प्राइमा फेशियल, यह बहुत अच्छा प्रतीत होता है, और PHP की तुलना में एक अद्भुत अनुभव है। (वास्तव में, यह मुझे C # और .NET के साथ खुशी के दिनों की याद दिला रहा है।)

हालाँकि, इस में जाने से, मुझे इस ढांचे या भाषा के साथ कोई अनुभव नहीं है, और मैं उत्सुक हूं - वर्तमान डाउनसाइड या ऐसी चीजें क्या हैं जो आप चाहते हैं कि आप तब जानते हों जब आप शुरुआत कर रहे थे?

(शायद इसे सामुदायिक विकि बनाया जाए?)


मैंने एक बार रेल की कोशिश की और रुक गया जब मुझे महसूस हुआ कि डेटाबेस-प्रथम इकाई डिजाइन आसानी से संभव नहीं है।
बाज़

5
avdi.org/devblog/2011/08/22/your-code-is-my-hell पढ़ने लायक है। मुझे लगता है कि किसी भी गतिशील रूप से टाइप की गई भाषा के साथ यह 80% या अधिक परीक्षण कवरेज के लिए अत्यंत महत्वपूर्ण है, या लगभग असंभव हो जाएगा।
एरिक विल्सन

अपने प्रश्न को और अधिक विशिष्ट और संतुलित बनाना (यानी "PHP से रूबी ऑन रेल्स - प्रॉसेस एंड कांस पर स्विच करना) अपने आप को कोसने और सामुदायिक विकी की इच्छा को दूर करने की आवश्यकता को दूर करेगा।
थॉमस लैंगस्टन

2
@ थोमस लेकिन यह मेरा सवाल नहीं है! PHP के पेशेवरों और विपक्ष वास्तव में अच्छी तरह से जाना जाता है। आरओआर के पेशेवरों को ढूंढना काफी आसान है। हालांकि, RoR के डाउनसाइड्स को एक नवागंतुक के रूप में खोजना आसान नहीं है और मुझे संदेह है कि उन्हें केवल कई वर्षों के अनुभव के साथ खोजा जाएगा। दूसरों के अच्छे अनुभव से सीखना इसी का उद्देश्य है। मेरे द्वारा पढ़े गए कई सीडब्ल्यू उनके स्वभाव में काफी विशिष्ट हैं।
मैटी

जवाबों:


32

यह अनुभव सीखने से है, सीखना जारी है, और रेल में अपेक्षाकृत सरल अनुप्रयोग लिखना है।

1) लर्निंग कर्व

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

कोई गलती मत करो, रेल मास्टर के लिए कठिन है। एक बार जब आप बहुत मूल बातें पा लेते हैं (इस पर बाद में) तो आप एक दीवार में हेडलॉन्ग चलाएंगे यदि आपको अत्यंत सरल "डेमो ऐप" कार्यक्षमता से अधिक करने की आवश्यकता है जिसे आप टाउट देखते हैं। आप सीखते समय रूबी के एक बुनियादी ज्ञान के साथ प्राप्त कर सकते हैं, लेकिन आपको जल्दी से रूबी को लेने की आवश्यकता है या DRYयदि आपको रेल अवरोधों के बाहर जाने की आवश्यकता है तो आपको उच्च और शुष्क (और अच्छी तरह से नहीं ) छोड़ दिया जाएगा ।

रेल है, जैसा कि मैं इसे प्यार से कॉल करना पसंद करता हूं, नंबर प्रोग्रामिंग द्वारा पेंट । यदि आप सम्मेलनों में 100% चिपके रहते हैं (अर्थात लाइनों के भीतर रहें और उन रंगों का उपयोग करें जिन्हें आप उपयोग करना चाहते हैं) तो आप जल्दी और आसानी से सभ्य अनुप्रयोग बना सकते हैं। यदि आपको कब और कैसे भटकना है, तो रेल आपके सबसे अच्छे दोस्त से लेकर आपके सबसे बड़े दुश्मन तक जा सकती है।

2) जब आप सभी एक हथौड़ा है ...

रेल सरलीकृत CRUD अनुप्रयोगों को बहुत अच्छी तरह से करता है। समस्या तब आती है जब आपके ऐप को डेटाबेस से सिर्फ पढ़ने / लिखने से अधिक करना पड़ता है। अब, मेरे द्वारा उपयोग किए गए अंतिम रेल संस्करण के रिकॉर्ड के लिए 2.3.4 था, तब से चीजें बदल सकती थीं, लेकिन मैं प्रमुख मुद्दों में भाग गया जब व्यावसायिक आवश्यकताएं बदल गईं, इसलिए एप्लिकेशन को इसमें एक छोटे वर्कफ़्लो सिस्टम का निर्माण करना पड़ा, और इसके साथ एकीकृत होना पड़ा। एक विरासत PHP आवेदन। "एक फ़ॉर्म, एक मॉडल" के रेल सम्मेलन तुच्छ एप्लिकेशन और डेटा प्रविष्टि अनुप्रयोगों के लिए ठीक काम करता है, लेकिन इतना नहीं जब आपको प्रसंस्करण तर्क करने की आवश्यकता होती है, या वर्कफ़्लो की आवश्यकता होती है, या ऐसा कुछ भी जो विशिष्ट नहीं है "उपयोगकर्ता डेटा में प्रवेश करता है कुछ पाठ फ़ील्ड, हिट "प्रकार की चीज़ सबमिट करें। यह किया जा सकता है, लेकिन यह "आसान" नहीं है, या इसके बजाय यह नहीं है

इसके अलावा, रेल अन्य अनुप्रयोगों के साथ अच्छी तरह से खेलना पसंद नहीं करता है जो डेटा उपयोग के पसंदीदा तरीकों का उपयोग नहीं कर रहे हैं; यदि आपको एक ऐसे एप्लिकेशन के साथ इंटरफेस करना है, जिसमें "वेब 2.0" स्टाइल एपीआई नहीं है, तो आपको इसके बजाय रेल के आसपास काम करना होगा; फिर से मैं यहाँ अनुभव से बोलता हूँ क्योंकि मेरे साथ यही हुआ है।

3) यह नया है

अंत में, कई क्षेत्रों में रेल अभी भी "ब्लॉक पर नया बच्चा" है। यह व्यक्तिगत उपयोग के लिए कोई फर्क नहीं पड़ता है या "मुझे लगता है कि यह अच्छा है और इसे सीखना चाहते हैं" प्रकार के परिदृश्य, लेकिन किसी ऐसे व्यक्ति के रूप में बोलना जो मेरे दिन की नौकरी पर रेल का उपयोग करना पसंद करेंगे, यदि आप उस स्थान पर नहीं हैं जहां रेल है व्यापक रूप से, रेल डेवलपर के रूप में पूर्णकालिक काम खोजना बहुत मुश्किल हो सकता है। यह अभी भी मोटे तौर पर "कूल्हे, नए स्टार्टअप" का डोमेन है और अधिकांश महानगरीय क्षेत्रों में प्रमुख खिलाड़ी नहीं है। इस संबंध में आपका माइलेज अलग-अलग हो सकता है, लेकिन मुझे पता है कि मेरा क्षेत्र (टैम्पा) रेल अनिवार्य रूप से कोई नहीं है।

4) आग और गति

रेल कभी बदलती है। यह एक अच्छी और बुरी दोनों चीज़ है; यह अच्छा है क्योंकि समुदाय नई अवधारणाओं को विकसित और गले लगाता है। यह बुरा है क्योंकि समुदाय विकसित और नई अवधारणाओं को गले लगाता है। यह रेल नौसिखिया के लिए बहुत भारी हो सकता है क्योंकि आम तौर पर जब आप किसी मुद्दे पर दौड़ते हैं, और चारों ओर देखते हैं, तो आप या तो ऐसे लोगों को इस तरह के रत्न की सिफारिश करते हुए देखेंगे, या यह कहेंगे कि रास्ता खराब है और आपको चाहिए ' टी इसका उपयोग करें, यहाँ एक बेहतर तरीका है ... और आप रेल के साथ सीखने के लिए रेल के साथ-साथ अतिरिक्त उपकरणों की एक कपड़े धोने की सूची को समाप्त करते हैं। चीजों की तरह Git, BDD/RSpec, Cucumber,Haml/Sass, और अन्य चीजों के लिए एक कॉर्नुकोपिया चारों ओर तैरता है और रेल-भूमि में "चीजों को करने के सही तरीके" के रूप में धकेल दिया जाता है, और अनुभव से बोलकर आप रैलियों के अलावा एक दर्जन या अधिक तकनीकों को सीखने की कोशिश में दलदल हो सकते हैं । क्योंकि मानक रेल टूलकिट का उपयोग करना "गलत" लगता है।

यह अब रेलगाड़ियों द्वारा 3.1 से अधिक जटिल हो गया है और सभी चीजों को डिफ़ॉल्ट रूप से सास और कॉफीस्क्रिप्ट बना रहा है, इसलिए कुल रेल नौसिखियों को न केवल रूबी और रेल सीखना है, बल्कि सैस (यकीनन सरल अगर आप सीएसएस को जानते हैं) और कॉफीस्क्रिप्ट (पागल नहीं, लेकिन निश्चित रूप से मुश्किल है) कच्चे जावास्क्रिप्ट से अलग) आरंभ करने के लिए एक न्यूनतम न्यूनतम पर, प्लस इसे गिट माना जा सकता है। यहां तक ​​कि RSpec और दोस्तों में फैक्टरिंग के बिना, और दर्जनों या अधिक रत्नों के साथ जो आप आमतौर पर समाप्त करेंगे, यह 4 अलग-अलग चीजें हैं जिन्हें आपको सीखना होगा इससे पहले कि आप गंभीरता से रेल एप्लिकेशन लिखना शुरू कर सकें। इसकी तुलना C #, या Java, या यहां तक ​​कि PHP जैसी भाषा से करें जहां आपका HTML / CSS / JavaScript / SQL ज्ञान नहीं बदलने जा रहा है और आपको बस भाषा और शायद फ्रेमवर्क की बारीकियों को सीखना होगा।


3
WRT रेल 3.1 Sass और CoffeeScript चूक हैं जिन्हें आसानी से बंद किया जा सकता है। वास्तव में "सामान्य" सीएसएस सिर्फ काम करेगा क्योंकि रेल 3.1 एसएसएस के एससीएसएस सिंटैक्स का उपयोग करता है। आप उनका उपयोग कर सकते हैं लेकिन आप किसी मजबूरी के तहत नहीं हैं। WRT Git मुझे लगता है कि Linus इसे बेहतर तरीके से समझाता है कि आपको वास्तव में Git जैसे DVCS का उपयोग क्यों करना चाहिए, भले ही आप किस फ्रेमवर्क का उपयोग करें। youtube.com/watch?v=4XpnKHJAok8
श्रेयस सतीश

ओह, मैं सहमत हूँ, बस यह कहते हुए कि रेल डिफ़ॉल्ट आमतौर पर बहुत अधिक सम्मोहित होता है इसलिए एक नौसिखिया इसे उपयोग करने के लिए दबाव महसूस करेगा (मुझे पता है कि मुझे ऐसा लगता है)
वेन मोलिना

3
+1 # 4 के लिए ... यदि आप एक वर्ष के लिए रेल छोड़ते हैं, तो जब आप वापस आते हैं तो हर कोई अंतरिक्ष यान में इधर-उधर उड़ जाएगा और आप अपनी रौबत सोच wtf में आ जाएंगे? रेल 3 जारी होने से पहले रेल 2 वाक्यविन्यास पुराना लगा।
13

-1 अच्छी रेलिंग पोस्ट को कोसते हैं लेकिन आप एक विकल्प भी नहीं सुझाते हैं। "नेस्टेड फॉर्म" एक कठिन समस्या है और रेल शायद इसे किसी से बेहतर बनाती है।
स्कॉचशूलथेस

13

प्रलेखन।

जबकि रेल मार्ग महान शिक्षण संसाधन हैं, रेल (और रूबी, आमतौर पर) पुस्तकालय संदर्भ को नेविगेट करना आसान नहीं है। कहो, आप belongs_toविधि के बारे में अधिक जानना चाहते हैं । यद्यपि यह ActiveRecord::Baseउपवर्गों (किसी के मॉडल) पर उपयोग किया जाता है , यह ActiveRecord::Baseडॉक्स में प्रलेखित नहीं है , लेकिन एक मिश्रण में जो वर्ग आयात करता है। अनिवार्य रूप से, आप उन सभी तरीकों की एक व्यापक सूची नहीं देख सकते हैं जिनका उपयोग आप एक स्थान पर किसी वस्तु पर कर सकते हैं (जब आप आग लगाते हैं irbऔर स्वयं वस्तु की जांच करते हैं) को छोड़कर ।

रूबी के रूप में एक अत्यधिक गतिशील भाषा के साथ, यह बताना सीधा नहीं है कि आप जिस विधि का उपयोग कर रहे हैं वह कहां से आती है। यह एक समस्या हो सकती है, विशेष रूप से प्रोग्रामर सीखने के लिए एक नई तकनीक स्टैक पर समझ पाने की कोशिश कर रहे हैं।


यह मेरे लिए एक हत्यारा है; जब भी हमें हमारे कुछ रूबी / रेल कोड को डिबग करने की आवश्यकता होती है, तो मैंने हमेशा यह जानने में बहुत समय बिताया है कि किसी दिए गए तरीके को कहां परिभाषित किया गया है; और फिर भी, हमेशा मेरे सिर के पीछे विचार रखना होगा कि सिर्फ इसलिए कि मैं विधि की परिभाषा देख सकता हूं, इसे कहीं और फिर से परिभाषित किया जा सकता है।
19

9

रूबी ऑन रेल्स में एक महत्वपूर्ण सीखने की अवस्था है। पहले आपको भाषा की विषमताओं को सीखना होगा, फिर फ्रेमवर्क को सीखना होगा, फिर रेल्स वे की चीजों को सीखना होगा, फिर सामान्य रूप से उपयोग किए जाने वाले कई रत्न के बारे में सीखना होगा।

हालाँकि, जब आपने उन चीजों को सीखा है, तो यह स्वाभाविक रूप से अविश्वसनीय रूप से आता है। वास्तव में अन्य ढांचे बोझ की तरह लगने लगते हैं।

रेल बहुत TDD / BDD- उन्मुख है, इसलिए यदि आप नहीं हैं तो दो और चीजें हैं जो आपको एक सक्षम रेल प्रोग्रामर बनने से पहले सीखनी होंगी। आपके पास बैकअप करने के लिए आपके पास एक कंपाइलर और आईडीई नहीं है, इसलिए टेस्ट कवरेज आपकी बहुत अधिक गिरावट है।

कई TDD अधिवक्ता, खुद को शामिल करते हैं, यह RoR की शक्तियों में से एक के साथ-साथ इसके अभिशाप पर भी विचार करेगा। एक बार जब आप टीडीडी लिखना शुरू करते हैं, तो आप पाते हैं कि परीक्षण कवरेज द्वारा दी गई सुरक्षा एक संकलक द्वारा दी गई सुरक्षा से बेहतर है। फिर एक संकलक को बोझिल करने के लिए कृपया कोड JUST लिखना होगा।

टीडीडी आरओआर में एक अतिरिक्त कार्य की तरह महसूस नहीं करता है, यह काम करने का एकमात्र तरीका महसूस करता है।

रेल के पास एक गंभीर प्रदर्शन समस्या है: प्रत्येक अनुरोध वर्तमान में सक्रिय एक के पीछे कतारबद्ध है, जैसा कि उन्हें फैलाने के लिए विरोध किया जाता है क्योंकि अधिकांश फ्रेमवर्क करते हैं या अवरुद्ध घटनाओं को Node.js और ट्विस्टर की तरह अन्य अनुरोधों को मुक्त करने की अनुमति देते हैं। इसका मतलब है कि आपको प्रतिक्रिया समय को तेज बनाने के लिए कोड करना होगा, लेकिन यह ज्यादातर मामलों में करना काफी आसान है।

रेल सामग्री को बहुत अच्छी तरह से संभालने के लिए रेल भी बहुत डिज़ाइन की गई है, जो कि निष्पक्षता में बहुत इंटरनेट है। कुछ और जटिल करना, जैसे कि वेब गेम या ईकॉमर्स सिस्टम, का अर्थ है नए रत्न सीखना। आप जल्दी से सीखते हैं कि सभी रत्न बाहर हैं, लेकिन जितना अधिक आप करना चाहते हैं वह उतना ही अस्पष्ट है, उतना ही अच्छा दस्तावेज ढूंढना होगा।


प्रदर्शन के मुद्दों को फिर से पढ़ें - मुझे यह पढ़ते हुए याद आता है कि उनमें से बहुत से बड़े पैमाने पर दुभाषिया के v1.9 के साथ हल किए गए थे, लेकिन मैं पूरी तरह से गलत हो सकता है। क्या इस प्रदर्शन सीमा को पार करने का कोई तरीका है?
मैटी

1
@ मैटी: जैसा कि मैंने जोड़ा, प्रतिक्रिया समय को यथासंभव तेज करने के लिए कोड। कुछ भी जो एक बैकएंड प्रक्रिया के लिए छोड़ा जा सकता है, ऐसा करें। लेकिन फिर आपको किसी भी ढांचे के साथ ऐसा करना चाहिए - यह आसान नहीं है। इसके अलावा, jRuby को अलग तरीके से पिरोया गया है, लेकिन यह अपनी समस्याओं के साथ आता है और मेरा जवाब पहले से ही काफी लंबा था।
पीडीआर

7

मेरे व्यक्तिगत अनुभव में, प्रमुख सिरदर्द संगतता के आसपास है

कब:

  • देखते हैं xरेल परियोजनाओं को तैनात किया,
  • प्रत्येक परियोजना yरत्नों का उपयोग करती है ।
  • जबकि nरेल के संस्करण हैं ,
  • mरत्नों के प्लस संस्करण,
  • severalमाणिक के संस्करणों के साथ ,
  • उत्पादन मशीन के रूप में एक ही लिनक्स बॉक्स पर।
  • प्रोग्रामर एक और ओएस एक्स विकास नोटबुक पर काम करता है।

एक स्वतंत्र, जो अद्यतन करने के लिए विलासिता नहीं है / चीजों में से सबसे उन्नयन, का एक बहुत का सामना करना पड़ेगा जैसा कि संगतता के मुद्दों से ऊपर चर से ... जबकि rails, gemsहै, और rubyबदलते रखने / विकसित हो।


7
आपके द्वारा उल्लिखित सब कुछ RVM (या rbenv ) और Bundler का उपयोग करके तय किया गया है । आप प्रत्येक परियोजना के लिए रूबी के विशिष्ट संस्करण और रत्नों के पृथक सेट रख सकते हैं।
एशले विलियम्स

यह उत्तर (अब) पूरी तरह अप्रासंगिक है। आरवीएम रूबी संस्करण का प्रबंधन करने के लिए, मणि संस्करण को संभालने के लिए बुंडलर; कैपिस्ट्रानो उत्पादन सर्वर के लिए तैनाती को संभालने के लिए और फिगारो आवेदन रहस्यों / पर्यावरण चर का ख्याल रखता है। मैं अपना एप्लिकेशन [Cloud9] (c9.io) (एक वेब IDE) पर विकसित करता हूं, और मेरी तैनाती की प्रक्रिया का शाब्दिक अर्थ है bundle exec cap production deploy। Capistrano सर्वर पर एप्लिकेशन को संस्करणित करने का ध्यान रखता है। किसी भी अन्य ढांचे की तरह जो बाहर आता है (जैसे Node.js), आपकी समस्याओं को हल करने के लिए उपकरण लिखे जाते हैं
क्रिस क्रेफ़िस

5

गति निश्चित रूप से एक मुद्दा है। रूबी का चरम लचीलापन एक महत्वपूर्ण प्रदर्शन हिट के साथ आता है।

क्षैतिज रूप से स्केलिंग एक गैर-स्पष्ट कार्य है, विशेष रूप से उस कार्य के लिए डिज़ाइन की गई तकनीकों को छोड़कर, जो आमतौर पर सादगी को अच्छी तरह से स्केल करने के लिए व्यापार करते हैं।
यदि आप प्रौद्योगिकी B के साथ तकनीक A के साथ प्रति मशीन 100 बार कई अनुरोधों को संभाल सकते हैं, तो प्रौद्योगिकी A का उपयोग करने पर विचार करने योग्य है यदि आपके पास यह विश्वास करने का कारण है कि आप अपने डेटा को एक समय सीमा के लिए एक सर्वर से जोड़ सकते हैं जो आपको जोड़ने की अनुमति देता है बाद में समानांतर।
2009 में स्टैकओवरफ्लो को अभी भी एक वेब सर्वर से परोसा गया था । बेशक यह अब कोई विकल्प नहीं है। लेकिन मुझे लगता है कि यह अच्छा था कि उन्होंने एक तकनीक के साथ शुरुआत की, जो एक ही उदाहरण पर बहुत सारे उपयोगकर्ताओं को स्केल कर सकता है, इससे पहले कि उन्हें स्केलिंग के बारे में चिंता करनी पड़े।

उसकी तुलना में, आरओआर वास्तव में धीमा है। सरल अनुरोधों को संभालने का समय महत्वपूर्ण है और इसलिए यह कई ग्राहकों को संभालने के लिए एक समस्या है (यह सब तेज विकल्पों के संबंध में देखा जाना है)।

अस्पष्ट अभिविन्यास के लिए, रूबी के लिए वेब विकास के लिए उपयुक्त विभिन्न अन्य भाषाओं की तुलना में, यहां कुछ नंबर दिए गए हैं:

ध्यान दें कि इसका मतलब यह नहीं है, कि यदि आप जावा के लिए फ्रेमवर्क X का उपयोग करते हैं, तो यह RoR की तुलना में 200 गुना तेज होगा। लेकिन इन बेंचमार्क में मापा गया गति अंतर आपके ऐप के समग्र प्रदर्शन पर महत्वपूर्ण प्रभाव डालता है।


4
यह उत्तर रनटाइम के बारे में केवल "गति" के बारे में बात करता है। रूबी (और रेल) ​​विकास की गति के लिए अनुकूलित है।
निकोलाई पुनश्चलिंग 13

5
यह एक अच्छी तुलना नहीं है। एक वेब अनुरोध में बिताया गया अधिकांश समय डेटाबेस से I / O कर रहा है। सीपीयू-गहन बेंचमार्क से जोड़ना भ्रामक है।
ryeguy

3
@pdr: ट्विटर की बहुत सारी समस्या यह थी कि वे हर चीज के लिए माणिक्य का उपयोग कर रहे थे , यहाँ तक कि उनकी बैकएंड प्रक्रियाएँ जो कि सीपीयू गहन थीं । इस तरह के क्षेत्र सांख्यिकीय रूप से टाइप की जाने वाली भाषाएं हैं। वे अब इसके लिए स्काला का उपयोग करते हैं। मैं ईमानदारी से, सही मायने में, मानता हूं कि रो # का उपयोग विकास के समय के मामले में सी # या जावा की तुलना में बहुत तेज है। मैं इसे अधिकांश वेब ऐप के लिए उपयोग करूंगा, और फिर किसी भी सीपीयू गहन पृष्ठभूमि नौकरियों के लिए C # या स्काला का उपयोग कर सकता हूं।
ryeguy

3
मान्य बिंदुओं के लिए +1। कहा जा रहा है, आप रेल अनुप्रयोगों को अनुकूलित करने के लिए बहुत कुछ कर सकते हैं। रैक अपने आप को एक बल्कि एक्स्टेंसिबल सिस्टम होने के लिए उधार देता है, जो सब कुछ कहे जाने वाले लचीलेपन के लिए अनुमति देता है। उल्लेख नहीं करने के लिए, रूबी 1.9 तेज है, रूबी तेज है। मैं व्यक्तिगत रूप से JRuby का बहुत बड़ा प्रशंसक हूं, JVM की शक्ति में मिश्रण करने में सक्षम होना एक अद्भुत जीत है (सिर्फ रत्नों से सावधान रहें जो प्रवाह नियंत्रण के अपवाद का उपयोग करते हैं -> विशाल उपरि)
Xorlev

2
@ नोइकोलाई रीशलिंग: रूबी या आरओआर को "विकास की गति के लिए अनुकूलित" होने में क्या मूल्य निहित है? क्या आप सत्य , मात्रात्मक डेटा प्रदान कर सकते हैं कि रूबी वास्तव में विकल्प (उदाहरण के लिए लिफ्ट) की तुलना में उच्च विकास गति कैसे प्रदान करता है? कुछ भी और सिर्फ एक शून्य का दावा है। साथ ही, यह सवाल RoR डाउनसाइड के बारे में था । उच्च विकास गति एक फायदा है और इस प्रकार इस प्रश्न के दायरे से बाहर है। खराब रनटाइम प्रदर्शन इस सवाल के दायरे में है, क्योंकि यह एक नकारात्मक पहलू है।
back2dos

3

रेल के पास एक गंभीर प्रदर्शन समस्या है: प्रत्येक अनुरोध वर्तमान में सक्रिय एक के पीछे कतारबद्ध है, जैसा कि उन्हें फैलाने के लिए विरोध किया जाता है क्योंकि अधिकांश फ्रेमवर्क करते हैं या अवरुद्ध घटनाओं को Node.js और ट्विस्टर की तरह अन्य अनुरोधों को मुक्त करने की अनुमति देते हैं। इसका मतलब है कि आपको प्रतिक्रिया समय को तेज बनाने के लिए कोड करना होगा, लेकिन यह ज्यादातर मामलों में करना काफी आसान है।

मुझे लगता है कि यह बहुत भ्रामक है। आप मल्टीथ्रेडेड मोड में रेल चला सकते हैं। जब मल्टीथ्रेडेड मोड में चल रहा है, तो आपको केवल IO पुस्तकालयों का उपयोग करना चाहिए जो GIL को रिलीज़ करते हैं (उदाहरण के लिए, 'mysql2' रत्न) अन्यथा यह व्यर्थ की तरह हो जाता है।

यदि आप jRuby का उपयोग कर रहे हैं, तो आप केवल मल्टीथ्रेडेड मोड में एक ही रेल प्रक्रिया चला सकते हैं और सभी उपलब्ध सीपीयू पावर का पूरी तरह से उपयोग कर सकते हैं। हालाँकि, यदि आप एमआरआई (रूबी 1.8.x या 1.9.x) पर हैं, तो सीपीयू का पूरी तरह से उपयोग करने के लिए आपको कई प्रक्रियाएँ चलानी चाहिए, जो कि नोड.जेएस के साथ भी है।


यहां एक स्पष्टीकरण का सवाल है - क्या कोई आसान तरीका है जिससे आईओ पुस्तकालयों को जीआईएल जारी किया जा सके?
मैटी

मुझे लगता है कि यह पता लगाने का सबसे अच्छा तरीका है कि इसे बेंचमार्क करें। gith.github.com/35d4769d8c8c0dfafc56
प्रतीक नाइक


कोर देवों में से एक से सुनने के लिए अच्छा है! यह जानकारी किसी भी दस्तावेज में सूचीबद्ध नहीं है? यह पता लगाने के लिए पुस्तकालयों का परीक्षण शुरू करना थोड़ा थकाऊ (हालांकि एक दिलचस्प गतिविधि) है।
मैटी

3
  • रेल में बहुत सारी बारीकियाँ होती हैं जो आपसे जटिलता को छिपाती हैं। (ActiveRecord संघों, संपूर्ण सत्यापन / बचत जीवनचक्र, प्रदान किए गए हेडर के आधार पर अनुरोध डेटा की व्याख्या) जब आप बस शुरू कर रहे हैं, तो यह भयानक है। जैसे-जैसे आप बड़े होते हैं, आप पाएंगे कि आप अपने ऐप को चीजों को संभालने के "रेल्स वे" पर फिट करना शुरू करते हैं - कभी-कभी यह अच्छा होता है, कभी-कभी यह हानिरहित होता है, और कभी-कभी यह वास्तव में उस चीज के प्रति-सहज होता है जिसे आप करने की कोशिश कर रहे हैं। सभी डेटाबेस तालिकाओं को वस्तुओं के रूप में नहीं बनाया जाना चाहिए, एक सत्यापन कदम कहीं और होने की आवश्यकता हो सकती है, आदि बहुत सारे प्रोग्रामर प्रोग्रामर फ्रेमवर्क से लड़ने से बचते हैं (जो आमतौर पर बुद्धिमान है), लेकिन इस का दीर्घकालिक प्रभाव है ... आप रेल की आदतों को अपने साथ उन स्थानों पर ले जाएगा जहाँ उन्हें जरूरी नहीं कहा जाता है।

  • समुदाय को सॉफ्टवेयर लिखने की आदत है जिसे "जादू" के रूप में बिल किया जाता है - जो कि जादुई काम करते हैं! घटना मैं / ओ कि जादुई आप तेजी से बनाता है! जादू का जादू! यहाँ आमतौर पर ऐसा क्या होता है कि तकनीकी समाधान के लिए एक बहुत ही आकर्षक एपीआई उपलब्ध कराया जाता है जिसकी कमी होती है, और आप बहुत ही सुंदर उदाहरणों से मूर्ख बन जाते हैं कि वह चीज़ जो आप करना चाहते हैं, और केवल बाद में पता चलता है कि यह एक अपूर्ण समाधान को कवर करता है। इस का चक्र बहुत स्थिर है, और आप इसके साथ रोल करना सीखते हैं, लेकिन आपको बहुत सारे और बहुत सारे कोड पढ़ने के विचार से परिचित होना चाहिए जो आप पर निर्भर करते हैं (एक अच्छी बात!)। रेल समुदाय जादू समाधान जादू के रूप में लगभग नहीं हैं क्योंकि README सुझाव दे सकता है, मैं कह रहा हूं।

  • ऊपर से कोरोलरी: जितना अधिक आप रेल का उपयोग करते हैं, उतना ही आपको इसके स्रोत को पढ़ना चाहिए। जितना बेहतर आप फ्रेमवर्क के इंटर्न्स को समझेंगे, उतना ही खुशहाल आप लंबे समय तक रहेंगे। इसमें वास्तव में विशिष्ट रेल नहीं है, लेकिन मैं आपको यहां अनुभव से बता रहा हूं। विधि के नाम कभी-कभी कुछ ऐसा वादा करते हैं जो आपको वास्तव में नहीं मिल रहा है।

  • कार्गो खेती एक मुद्दा w / रेल है, लेकिन यह शायद सच w / सभी ढांचे / लंग समुदायों है। रेल में यह अधिक स्पष्ट (मुझे) लगता है, और जैसे रेल कोड को एक अजीब पीढ़ीगत रूप देने के लिए जाता है - जैसा कि आप विभिन्न रेल परियोजनाओं पर काम करते हैं, आप कुछ प्रवृत्तियों को नोटिस करेंगे जो उस समय अवधि को धोखा देने की प्रवृत्ति रखते हैं जिसमें वे बनाए गए थे । जैसा कि आप उस कथन से अनुमान लगा सकते हैं, समुदाय नए समाधान अपनाने और पुराने लोगों को पदावनत करने के लिए बहुत तेजी से आगे बढ़ता है। आपको वास्तव में अपने रूबी समाचार के शीर्ष पर होना चाहिए, बस कुछ कोड को समझना होगा जो आप दैनिक आधार पर अनुभव करेंगे।

  • आम तौर पर, मुझे लगता है कि डेटा संगामिति का मुद्दा आमतौर पर समुदाय द्वारा अच्छी तरह से संबोधित नहीं किया जाता है - जैसा कि आप एक ऐप को विकसित करते हैं, जब आप उस बिंदु को मारते हैं जहां आपको डेटा को शार्प करने की आवश्यकता होती है, तो भौतिक रूप से दूरस्थ परिवर्तन और डेटा तक लॉक की पहुंच, समाधान बन जाते हैं। थोड़ा और हाथ ट्यून किया गया है, जो कुछ अच्छी दिखने वाली रेल की चीजों को बनाता है जो आपको सटीकता के तकनीकी आवश्यकताओं की w / muddied होती हैं। रेल हर समस्या को हल नहीं करती है जो आपके पास एक वेब ऐप के साथ होगी, मुझे लगता है कि मैं कह रहा हूं, और जब रचनाकार निश्चित रूप से उस संदेश का प्रचार नहीं करते हैं, तो यह सोचना आसान है कि यह निहित है।


2

आप इसे कैसे देखते हैं, इस पर निर्भर करता है कि जिस गति से रेल बदलती है, वह आपके लिए एक चेतावनी हो सकती है या नहीं। चीजें कुछ हद तक साल-दर-साल बदलती रहती हैं, जितना कि बेकार है और समाधान की जरूरत है।

यदि आप सक्रिय विकास में हैं, तो आप इस की नब्ज पर अपनी उंगली रखेंगे।

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