एक पेंच + एक स्क्रीनकास्ट आपको दिखा रहा है कि आप अपने खुद के रत्नों को कैसे होस्ट कर सकते हैं
आइए इसे इस तरह से हटा दें:रत्न कमाल के हैं, और RubyGems.org एक बेहतरीन सेवा है।
...लेकिन हाल ही में जब भी मैं किसी ऐप में कोई नया रत्न जोड़ता हूं तो मुझे बेचैनी महसूस होती है। जितना अधिक मैं इसके बारे में सोचता हूं, उतना ही ऐसा लगता है कि जिस तरह से हम रत्नों का उपयोग करते हैं वह सिर्फ त्रुटिपूर्ण नहीं है। यह एक आपदा होने की प्रतीक्षा कर रहा है।
सामाजिक इंजीनियरिंग FTW
कुछ दिनों पहले रूबीनेशन में, बेन स्मिथ ने हैकिंग विद जेम्स नामक एक महान भाषण दिया।
चालूहैकिंग नहीं कर रहा रत्न, लेकिन हैक करने के तरीके के रूप में रत्नों का उपयोग...एक हमले के वेक्टर के रूप में।
उन्होंने एक अच्छा प्रयोग किया।
यदि आप सम्मेलन में थे, तो आपने शायद जीथब स्टिकर और अन्य स्वैग के बगल में अच्छी तरह से मुद्रित कार्डों के ढेर देखे।
कार्ड ने एक बात कही:gem install rubynation
. और लगभग 10% उपस्थित लोगों ने किया।
मणि ने क्या नहीं किया
मणि ने कुछ उपयोगी चीजें कीं। लेकिन इसने जो नहीं किया वह अधिक दिलचस्प था।
ऐसा नहीं हुआ:
-
अपने जेमकटर डॉटफाइल से RubyGems.org क्रेडेंशियल चुराएं
-
प्लेनटेक्स्ट पासवर्ड को इंटरसेप्ट करें और उन्हें अपने रेल / पब्लिक डायरेक्टरी में स्टोर करें
-
अपने सिस्टम में एक गुप्त SSH खाता जोड़ें
लेकिन हो सकता था। बेन से पूछें कि क्या आप मुझ पर विश्वास नहीं करते हैं।
इससे आपको डर लगना चाहिए
मुझे बस बैक अप लेने दें और इसे फिर से कहें, ताकि यह डूब जाए।
लगभग 25 लोगों - कंप्यूटर प्रोग्रामर - को उनकी विकास मशीनों पर मनमाने कोड चलाने में हेरफेर किया गया था। कुछ ने इसे रूट के रूप में भी चलाया।
मेरा मतलब इन लोगों को चुनना नहीं है। रूबी समुदाय में यह सिर्फ आदर्श है।
ऐसा क्यों हुआ?
लोग रत्नों पर भरोसा करते हैं।
-
क्योंकि वे आमतौर पर काम करते हैं।
-
क्योंकि रेल एक रत्न है।
-
क्योंकि हारून पैटरसन, स्टीव क्लैबनिक और येहुदा काट्ज़ जैसे जाने-माने लोग उनका पालन-पोषण करते हैं।
लेकिन समस्या तब होती है जब आप उन लोगों पर भरोसा करना शुरू कर देते हैं जिन्हें आप नहीं जानते।
जब आप gem install rubynation
. टाइप करते हैं तो यह एक समस्या है gem install rails
. टाइप करने से ज्यादा झिझक के साथ ।
और चलो ईमानदार हो। कम से कम एक बार ऐसा किसने नहीं किया है? हम आलसी हैं और रत्न आसान हैं।
Rubygems.org को दोष नहीं देना है
यह गलत काम करना बेहद आसान बनाता है। अपने सर्वर पर अविश्वसनीय कोड चलाने के लिए। परिवर्तनों . के बारे में जानकारी न देने के लिए आपके सर्वर पर चलने वाले कोड में।
इसलिए मैं सुझाव दे रहा हूं कि हम सभी इसे उत्पादन में इस्तेमाल करना बंद कर दें।
समाधान
हस्ताक्षर पर्याप्त नहीं हैं
सभी को अपने रत्नों पर हस्ताक्षर करने चाहिए। लेकिन हस्ताक्षर पर्याप्त नहीं हैं। एक हस्ताक्षर केवल प्रकाशक की पहचान की पुष्टि करता है। यह आपको नहीं बताता कि वे अच्छे हैं, बुरे हैं, या अराजक तटस्थ हैं।
बचाने के लिए कोई नहीं आ रहा है
एक आदर्श दुनिया में, हमारे पास एक विश्वसनीय संगठन होगा जो ऐसे रत्नों के संस्करण वितरित करता है जिन्हें अच्छा माना जाता है।
यदि यह आपको गलत तरीके से परेशान करता है, तो सोचें कि डेबियन जैसे संगठन लिनक्स के लिए कुछ ऐसा ही कैसे करते हैं। अगर वह अभी भी आपको गलत तरीके से परेशान करता है .... ठीक है, मैं सम्मानित हूं कि आप मेरा ब्लॉग पढ़ रहे हैं, श्रीमान स्टॉलमैन।
मैं एक परिपूर्ण दुनिया में क्यों कहता हूँ? ठीक है, क्योंकि अन्य विकल्प एक टन काम हैं, और मैं इसे नहीं करना चाहूंगा।
...क्या आप में से कोई वाईसी उम्मीदवार कृपया इसे प्राप्त कर सकता है?
एकमात्र वास्तविक विकल्प:DIY
दुर्भाग्य से मुझे इस बदबूदार पुरानी वास्तविक दुनिया में रहना है। अपने रत्नों पर पूर्ण नियंत्रण रखने का एकमात्र वास्तविक तरीका है।
-
विश्वासघात के लिए कोड की समीक्षा करें
-
रत्नों की मेजबानी स्वयं करें
सौभाग्य से, अपने स्वयं के रत्नों की मेजबानी करना आसान है। मैं आपको दिखाता हूँ कि कैसे।
अपने खुद के रत्न कैसे होस्ट करें
यह जादू नहीं है
एक रत्न "सर्वर" वेब पर फ्लैट फाइलों का एक गुच्छा है। आप उन्हें कहीं भी होस्ट कर सकते हैं, यहां तक कि 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 एक ओपन सोर्स एप्लिकेशन है जो कमांड लाइन के बहुत सारे काम को खत्म कर देता है।
जेमफ्यूरी एक निजी जेम होस्टिंग कंपनी है। मैंने उन्हें अतीत में क्लाइंट के लिए कुछ मालिकाना रत्न होस्ट करने के लिए उपयोग किया है। इसे स्थापित करना आसान था और कभी कोई समस्या नहीं हुई।