Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

उत्पादन में RubyGems.org का उपयोग करने के विरुद्ध मामला

एक पेंच + एक स्क्रीनकास्ट आपको दिखा रहा है कि आप अपने खुद के रत्नों को कैसे होस्ट कर सकते हैं

आइए इसे इस तरह से हटा दें:रत्न कमाल के हैं, और RubyGems.org एक बेहतरीन सेवा है।

...लेकिन हाल ही में जब भी मैं किसी ऐप में कोई नया रत्न जोड़ता हूं तो मुझे बेचैनी महसूस होती है। जितना अधिक मैं इसके बारे में सोचता हूं, उतना ही ऐसा लगता है कि जिस तरह से हम रत्नों का उपयोग करते हैं वह सिर्फ त्रुटिपूर्ण नहीं है। यह एक आपदा होने की प्रतीक्षा कर रहा है।

सामाजिक इंजीनियरिंग FTW

कुछ दिनों पहले रूबीनेशन में, बेन स्मिथ ने हैकिंग विद जेम्स नामक एक महान भाषण दिया।

चालूहैकिंग नहीं कर रहा रत्न, लेकिन हैक करने के तरीके के रूप में रत्नों का उपयोग...एक हमले के वेक्टर के रूप में।

उन्होंने एक अच्छा प्रयोग किया।

यदि आप सम्मेलन में थे, तो आपने शायद जीथब स्टिकर और अन्य स्वैग के बगल में अच्छी तरह से मुद्रित कार्डों के ढेर देखे।

कार्ड ने एक बात कही:gem install rubynation . और लगभग 10% उपस्थित लोगों ने किया।

उत्पादन में RubyGems.org का उपयोग करने के विरुद्ध मामला

मणि ने क्या नहीं किया

मणि ने कुछ उपयोगी चीजें कीं। लेकिन इसने जो नहीं किया वह अधिक दिलचस्प था।

ऐसा नहीं हुआ:

  • अपने जेमकटर डॉटफाइल से RubyGems.org क्रेडेंशियल चुराएं

  • प्लेनटेक्स्ट पासवर्ड को इंटरसेप्ट करें और उन्हें अपने रेल / पब्लिक डायरेक्टरी में स्टोर करें

  • अपने सिस्टम में एक गुप्त SSH खाता जोड़ें

लेकिन हो सकता था। बेन से पूछें कि क्या आप मुझ पर विश्वास नहीं करते हैं।

इससे आपको डर लगना चाहिए

मुझे बस बैक अप लेने दें और इसे फिर से कहें, ताकि यह डूब जाए।

लगभग 25 लोगों - कंप्यूटर प्रोग्रामर - को उनकी विकास मशीनों पर मनमाने कोड चलाने में हेरफेर किया गया था। कुछ ने इसे रूट के रूप में भी चलाया।

मेरा मतलब इन लोगों को चुनना नहीं है। रूबी समुदाय में यह सिर्फ आदर्श है।

ऐसा क्यों हुआ?

लोग रत्नों पर भरोसा करते हैं।

  • क्योंकि वे आमतौर पर काम करते हैं।

  • क्योंकि रेल एक रत्न है।

  • क्योंकि हारून पैटरसन, स्टीव क्लैबनिक और येहुदा काट्ज़ जैसे जाने-माने लोग उनका पालन-पोषण करते हैं।

लेकिन समस्या तब होती है जब आप उन लोगों पर भरोसा करना शुरू कर देते हैं जिन्हें आप नहीं जानते।

जब आप gem install rubynation . टाइप करते हैं तो यह एक समस्या है gem install rails . टाइप करने से ज्यादा झिझक के साथ ।

और चलो ईमानदार हो। कम से कम एक बार ऐसा किसने नहीं किया है? हम आलसी हैं और रत्न आसान हैं।

Rubygems.org को दोष नहीं देना है

यह गलत काम करना बेहद आसान बनाता है। अपने सर्वर पर अविश्वसनीय कोड चलाने के लिए। परिवर्तनों . के बारे में जानकारी न देने के लिए आपके सर्वर पर चलने वाले कोड में।

इसलिए मैं सुझाव दे रहा हूं कि हम सभी इसे उत्पादन में इस्तेमाल करना बंद कर दें।

समाधान

हस्ताक्षर पर्याप्त नहीं हैं

सभी को अपने रत्नों पर हस्ताक्षर करने चाहिए। लेकिन हस्ताक्षर पर्याप्त नहीं हैं। एक हस्ताक्षर केवल प्रकाशक की पहचान की पुष्टि करता है। यह आपको नहीं बताता कि वे अच्छे हैं, बुरे हैं, या अराजक तटस्थ हैं।

बचाने के लिए कोई नहीं आ रहा है

एक आदर्श दुनिया में, हमारे पास एक विश्वसनीय संगठन होगा जो ऐसे रत्नों के संस्करण वितरित करता है जिन्हें अच्छा माना जाता है।

यदि यह आपको गलत तरीके से परेशान करता है, तो सोचें कि डेबियन जैसे संगठन लिनक्स के लिए कुछ ऐसा ही कैसे करते हैं। अगर वह अभी भी आपको गलत तरीके से परेशान करता है .... ठीक है, मैं सम्मानित हूं कि आप मेरा ब्लॉग पढ़ रहे हैं, श्रीमान स्टॉलमैन।

मैं एक परिपूर्ण दुनिया में क्यों कहता हूँ? ठीक है, क्योंकि अन्य विकल्प एक टन काम हैं, और मैं इसे नहीं करना चाहूंगा।

...क्या आप में से कोई वाईसी उम्मीदवार कृपया इसे प्राप्त कर सकता है?

एकमात्र वास्तविक विकल्प:DIY

दुर्भाग्य से मुझे इस बदबूदार पुरानी वास्तविक दुनिया में रहना है। अपने रत्नों पर पूर्ण नियंत्रण रखने का एकमात्र वास्तविक तरीका है।

  • विश्वासघात के लिए कोड की समीक्षा करें

  • रत्नों की मेजबानी स्वयं करें

सौभाग्य से, अपने स्वयं के रत्नों की मेजबानी करना आसान है। मैं आपको दिखाता हूँ कि कैसे।

अपने खुद के रत्न कैसे होस्ट करें

उत्पादन में RubyGems.org का उपयोग करने के विरुद्ध मामला

यह जादू नहीं है

एक रत्न "सर्वर" वेब पर फ्लैट फाइलों का एक गुच्छा है। आप उन्हें कहीं भी होस्ट कर सकते हैं, यहां तक ​​कि S3 या ड्रॉपबॉक्स पर भी।

एक रेल ऐप को टेस्टबेंच के रूप में बनाएं

यहां रेल का उपयोग करने का एकमात्र कारण यह है कि यह हमें खेलने के लिए एक प्रीमियर जेमफाइल देता है। यह ऐप कुछ नहीं करता है।

`$ rails new myapp
$ cd myapp
`

.gem फ़ाइलें डाउनलोड करें

यह बंडलर कमांड Gemfile.lock द्वारा संदर्भित सभी .gem फाइलों को डाउनलोड करेगा और उन्हें /vendor/cache में डाल देगा।

`$ bundle package
$ mkdir /tmp/gem_server
$ mv vendor/cache/ /tmp/gem_server/gems
`

'सर्वर' फ़ाइलें जेनरेट करें

.gem फ़ाइलों की निर्देशिका लेने और उन्हें सेवा के लिए तैयार करने के लिए, आप gem generate_index चलाते हैं ।

`$ gem generate_index -d /tmp/gem_server/
`

सब कुछ ऑनलाइन करें

अब मैं उत्पादन में इसकी अनुशंसा नहीं करूंगा, लेकिन...

`$ mv /tmp/gem_server /Users/snhorne/Dropbox/Public/
`

अपना Gemfile और बंडल अपडेट संपादित करें

रूबीजेम्स के बजाय अपने नए होस्ट को इंगित करने के लिए "स्रोत" लाइन को अपडेट करें

`# Gemfile

source 'https://dl.dropboxusercontent.com/u/12345/gem_server'
...
gem 'rails', '3.2.13'
`

ठंडा! यह मेरे ड्रॉपबॉक्स से रत्न खींच रहा है।

`$ bundle update
Fetching gem metadata from https://dl.dropboxusercontent.com/u/12345/gem_server/.
Fetching full source index from https://dl.dropboxusercontent.com/u/12345/gem_server/
Using rake (10.1.0)
Using i18n (0.6.1)
Using multi_json (1.7.7)
Using activesupport (3.2.13)
`

बोनस:निजी रत्नों को HTTP मूल प्रमाणीकरण द्वारा संरक्षित किया जा सकता है

बस अपने जेमफाइल को इस तरह बनाएं:

`# Gemfile

source 'https://username:[email protected]/'
`

विकल्प

क्या यह तरीका आपके काम नहीं आता? कुछ मुफ्त और व्यावसायिक रत्न होस्टिंग समाधान हैं जो आपको कुछ और घंटियाँ और सीटी देते हैं।

Geminabox एक ओपन सोर्स एप्लिकेशन है जो कमांड लाइन के बहुत सारे काम को खत्म कर देता है।

जेमफ्यूरी एक निजी जेम होस्टिंग कंपनी है। मैंने उन्हें अतीत में क्लाइंट के लिए कुछ मालिकाना रत्न होस्ट करने के लिए उपयोग किया है। इसे स्थापित करना आसान था और कभी कोई समस्या नहीं हुई।


  1. ViewComponent Gem का परिचय

    रिएक्ट से प्रेरित, ViewComponents रूबी ऑब्जेक्ट हैं जिनका उपयोग दृश्य प्रस्तुत करने के लिए मार्कअप बनाने के लिए किया जाता है। ViewComponent रेल में पुन:प्रयोग करने योग्य, परीक्षण योग्य और इनकैप्सुलेटेड व्यू घटकों के निर्माण के लिए एक ढांचा है। आम तौर पर, पुन:प्रयोज्य दृश्य आंशिक का उपयोग करके रेल मे

  1. रूबी केस स्टेटमेंट के कई उपयोग

    जब भी आपको कुछ if / elsif . का उपयोग करने की आवश्यकता हो आप इसके बजाय रूबी केस स्टेटमेंट का उपयोग करने पर विचार कर सकते हैं। इस पोस्ट में, आप कुछ अलग उपयोग के मामलों के बारे में जानेंगे और यह सब वास्तव में हुड के तहत कैसे काम करता है। नोट:अन्य प्रोग्रामिंग भाषाओं में इसे स्विच . के रूप में जाना

  1. काम पर लग जाएं:इनबॉक्स जीरो के खिलाफ मामला

    कुछ साल पहले, एक सहकर्मी और मेरी ईमेल के विषय पर बातचीत हुई थी। उसके इनबॉक्स में हज़ारों ईमेल थे, और जैसा कि उसने समझाया कि उसने इसे साफ़ क्यों नहीं किया, उसने एक अच्छी बात उठाई—क्यों इतनी सारी ऊर्जा ईमेल को छाँटने में लगा दी जब आप बस वही खोज सकते हैं जो आप खोज रहे हैं? इनबॉक्स ज़ीरो कई उत्पादकता ज