> =) Absurdopediya उन्होंने यह वर्णन करके शुरू करने की योजना बनाई कि ...">

यसोद = हास्केल $ वेब

हास्केल अभी भी एकमात्र प्रोग्रामिंग भाषा है जिसमें एक ऑपरेटर "फ़ाइल" है (>> =)

Absurdopediya


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


पात्र


मैं लंबे समय से वेब विकास के लिए हास्केल का प्रयास करना चाहता था। सबसे पहले, यह मेरे पेशेवर कैरियर के लिए पर्याप्त है, और दूसरी बात, यह बेतहाशा दिलचस्प है) ठीक है, अंत में, हम हास्केल सीखने का एक तरीका प्राप्त करते हैं और फैक्टरिंग को हल करने और खोज करने के लिए एल्गोरिदम के पीछे नहीं सोते हैं।

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

Yesod


मैं हर चीज का पर्याप्त विवरण और पूर्ण रूप से वर्णन करने की कोशिश करूंगा - सिर्फ मामले में। तो, पहले आपको ग्लासगो हास्केल कंपाइलर स्थापित करने की आवश्यकता है। कोई भी पैकेज प्रबंधक:

emerge -av ghc 

काबाल भी चोट नहीं करता है :

 emerge -av cabal cabal update 

निर्भरता पर अपने दिमाग को रैक नहीं करने के लिए, यह कैबल-देव का उपयोग करने के लायक है, जो आपको भविष्य में सैंडबॉक्स (वर्चुअनव्यू के समान) में आवश्यक सभी पैकेजों को स्थापित करने की अनुमति देगा।

 cabal install cabal-dev 

अब पहले आवेदन के लिए एक रिक्त बनाएँ। दरअसल, यसोड हमारे लिए सब कुछ करेगा:

 yesod init 

हम एप्लिकेशन के नाम, डेटा स्टोरेज की विधि (उदाहरण के लिए, पोस्टग्रैस्कल में) और वॉइला को इंगित करते हैं - हमें पूरी तरह से कार्यशील वेब एप्लिकेशन के साथ एक निर्देशिका मिलती है। यह केवल केबल-देव का उपयोग करके निर्भरता स्थापित करने के लिए बना हुआ है:

 cd MyApp cabal-dev install 

कंसोल निकास पर थोड़ा ध्यान - और हम विचार को लागू करने के करीब एक कदम हैं। यह डेटाबेस के लिए कॉन्फ़िगरेशन निर्दिष्ट करने के लिए याद रखना है। यह config / postgresql.yml फ़ाइल में देखा जा सकता है - और यहाँ सब कुछ पहले से ही चोरी हो गया है, हम हमारे लिए सोच रहे हैं ! फ़ाइल में 4 प्रकार के कॉन्फ़िगरेशन (विकास, परीक्षण, मंचन, उत्पादन) और एक डिफ़ॉल्ट कॉन्फ़िगरेशन शामिल है, जिसमें से सभी को विरासत में मिला है। यह डेटाबेस उपयोगकर्ता नाम, पासवर्ड और डेटाबेस का नाम निर्दिष्ट करने के लिए बना हुआ है।
अब सर्वर शुरू करें:

 yesod devel --dev 

Thedev विकल्प आपको काबल -देव का उपयोग करने के लिए कहता है - अन्यथा Yesod सिस्टम पर स्थापित संकुल के लिए देखेगा।
आप सभी को, अपने सांस ब्राउज़र में खोले जा सकते हैं, http: // localhost: 3000

एक सवाल है जिसने मुझे एक प्रोग्रामर और सिर्फ एक पर्याप्त व्यक्ति के रूप में अपने कौशल पर संदेह किया है। तथ्य यह है कि जब परियोजना के साथ खेलने का समय आया, तो मैं अपने प्रयासों का परिणाम नहीं देख सका (भले ही ये टेम्पलेट में बदलाव थे!)। यह पता चला कि पूर्ण पुनरारंभ के लिए, आपको नहीं करना चाहिए

 cabal-dev build / yesod build 

या सिर्फ विकास सर्वर को पुनरारंभ करें - आपको एप्लिकेशन को फिर से इंस्टॉल करना होगा

 cabal-dev install 

मुझे ऐसा लगता है कि यह कभी स्पष्ट नहीं है, हालांकि यह बग या सुविधा अभी तक स्पष्ट नहीं है।

Heroku


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

इसलिए, हम हरोकू पर एप्लिकेशन बनाते हैं:

 heroku create my-app --stack=cedar --buildpack https://github.com/<   buildpack>.git 

इसके बाद, आपको git रिपॉजिटरी को इनिशियलाइज़ करना होगा और इसमें MyApp को जोड़ना होगा। परिनियोजन से पहले, आपको कुछ बदलाव करने की आवश्यकता है जिनके बारे में आप आसानी से भूल सकते हैं। आरंभ करने के लिए, आपको प्रॉसीफ़ाइल को प्रोजेक्ट की रूट से नियत निर्देशिका में स्थानांतरित करना होगा - इस फ़ाइल में प्रोजेक्ट को कैसे शुरू किया जाए, इसकी जानकारी है। उसके बाद, आपको डेटाबेस और साइट के उत्पादन कॉन्फ़िगरेशन को ठीक करना चाहिए:

डीबी के बारे में - बेशक, शुरुआत के लिए आपको ऐड-ऑन हेरोकू पोस्टग्रेज को जोड़ने की आवश्यकता है। जोड़ने के बाद, आप कमांड के साथ कनेक्शन स्ट्रिंग का पता लगा सकते हैं

 heroku pg:info # HEROKU_POSTGRESQL_URL heroku pg:credentials HEROKU_POSTGRESQL_URL 

सभी परिवर्तनों को करने के बाद, हरोकू रिमोट रिपॉजिटरी निर्दिष्ट करें:

 heroku git:remote -a MyApp 

और सर्वर में परिवर्तन भेजें

 git push heroku master 

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

 heroku push -b ~/mybuildpack 

कुछ बदलाव करने के बाद:

 -export PATH=$FIXED_HOME/ghc/bin:$FIXED_HOME/.cabal/bin$PATH +export PATH=$FIXED_HOME/ghc/bin:$FIXED_HOME/.cabal/bin:$PATH -cabal install -j5 --disable-library-profiling --disable-executable-profiling --disable-shared +cabal install -j2 --disable-library-profiling --disable-executable-profiling 


मेरे आश्चर्य के लिए, सब कुछ काम किया और तैनाती सफल रही! (टिप्पणियों में एक गर्म चर्चा को प्रोत्साहित किया गया है, क्योंकि मैं खुद पूरी तरह से समझ नहीं पाया कि यह क्यों काम किया है)

निष्कर्ष


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

पुनश्च:
उत्पादन में हास्केल का उपयोग करने के बारे में प्रस्तुतियों की एक जोड़ी
mth.io/talks/haskell-in-production
www.shimweasel.com/hs_gbu

Source: https://habr.com/ru/post/In184058/


All Articles