2016-06-17 3 views
6

tl को अद्यतन करने के लिए सर्वश्रेष्ठ अभ्यास; डॉ

एक सप्ताह के बारे में पहले मैं अपनी पहली गैर तुच्छ हास्केल परियोजना के लिए 0.1.0.0 पैकेज जारी किया। मैं गैर-हास्केलर्स के लिए भी निष्पादन योग्य स्थापित करना और अपग्रेड करना चाहता हूं। the README में, मैंने cabal install का उपयोग करके इंस्टॉल करने का सुझाव दिया। क्या यह एक गलती है?एक हास्केल आवेदन वितरण और यह

प्रसंग

मैं "कबाल नरक" के बारे में सुना था, लेकिन नहीं पता था कि यह उन पैकेज के एक विश्व स्तर पर स्थापित प्रतिलिपि को उन्नत करने के लिए कैसे रफ़ू मुश्किल तब भी जब मैं परंपरागत ढंग से वास्तव में किसी भी परिवर्तन नहीं किया होगा, .cabal फ़ाइल में संस्करण निर्भरताएं। अंत में, मैं 0.1.0.0 से 0.2.0.0 तक अद्यतन करने की कोशिश कर रहा एक गहरी खरगोश छेद नीचे चला गया। इसने मुझे निर्भरताओं को तोड़ने के बारे में चेतावनी दी, मैंने अपग्रेड को मजबूर करने या अपने स्थानीय राज्य को रीसेट करने के लिए विभिन्न incantations की कोशिश की, और प्रणाली को इतनी मेहनत से घायल कर दिया कि मुझे ghc और cabal-install ब्रू पैकेज (यह मैकोज़ पर है) को पुनः स्थापित करना था सब कुछ एक ऐसे राज्य में वापस जहां मैं स्थापित और फिर से चला सकता है।

विकल्प:

  • stack install: मैं पहले से ही ढेर उपयोग कर रहा था स्थानीय विकास के वातावरण के प्रबंधन के लिए, लेकिन यह, बहुत अच्छी तरह से स्वतंत्र रूप में अच्छी तरह स्थापित करता है के लिए काम करने के लिए जब तक आप ढेर पहले स्थापित किया है लगता है। (बस अपने $PATH को उचित रूप से स्थापित करने की आवश्यकता है।)
  • प्रीबिल्ट बाइनरी वितरित करना: अंतिम उपयोगकर्ताओं के लिए अच्छा और आसान होगा, लेकिन कम से कम ओएस एक्स पर, मुझे कोड हस्ताक्षर के बारे में चिंता करने की आवश्यकता होगी और मैं भी नहीं इसके लिए एक पहचान स्थापित की गई है।

तो, मेरे रीडमे में अभी मैं stack install और cabal install दोनों का उल्लेख कर रहा हूं। लेकिन 2016 का सबसे अच्छा अभ्यास क्या है?

+1

यदि उपयोगकर्ता आपके पैकेज को स्थापित करने का प्रयास करते हुए "कैबल-नरक" में भाग लेते हैं तो यह वास्तव में आपकी समस्या नहीं है यदि आपने अपनी निर्भरताओं को सही तरीके से निर्दिष्ट किया है।एप्लिकेशन कैबल उपयोगकर्ता स्थापित करने के लिए यदि वे पैकेज संस्करण समस्याओं में भाग लेते हैं तो हमेशा सैंडबॉक्स का उपयोग कर सकते हैं। दोनों 'स्टैक' और 'कैबल' के पास हास्केल पारिस्थितिकी तंत्र में उनकी जगह है। मुझे लगता है कि सबसे अच्छा अभ्यास यह सुनिश्चित करना है कि आपका एप्लिकेशन किसी भी का उपयोग करके स्थापित किया जा सके। – ErikR

उत्तर

3

अपने .cabal file पर ध्यान देने के बाद मुझे लगता है कि आपकी निर्भरताओं पर कोई सीमा नहीं है। आपको वास्तव में कम से कम निचले सीमाएं और अधिमानतः दोनों निचले और ऊपरी सीमाएं होनी चाहिए।

रूप @Emanuel Borsboom उल्लेख किया है, आप के लिए संस्करण की कमी में stack भरने हो सकता है आप के साथ Hackage करने के लिए एक पैकेज अपलोड करते हैं: अनुप्रयोगों मैं cabal.config फ़ाइल शामिल करने की सलाह के लिए,

stack upload --pvp-bounds=both 

वास्तव में पैकेज में cabal freeze द्वारा उत्पन्न:

cabal freeze 
mv cabal.config cabal.config-sample 

जब Hackage से मुसीबत इमारत लीगेसी एप्लिकेशन में चल मैं अक्सर टी कामना की है उन्होंने लेखकों को यह जानकारी शामिल की थी। आपको कम से एक विशेष स्नैपशॉट के लिए cabal.config फ़ाइल प्राप्त कर सकते हैं:

https://www.stackage.org/{RESOLVER}/cabal.config 

और अपने stack.yaml फ़ाइल में मैं एक nightly- के बजाय एक मानक LTS संस्करण का प्रयोग करेंगे। माना जाता है कि वे कभी भी हटा नहीं पाएंगे। अन्य हाथ पर आप स्नैपशॉट निर्देशिकाओं को बनाए रखने के लिए अपने उपयोगकर्ताओं को मदद कर रहे हैं।

+0

मजेदार, मेरे पास 'cabal.config' था लेकिन [मैंने इसे हटा दिया] (https://github.com/wincent/docvim/commit/5ad9b0f4cdc) क्योंकि मुझे लगा कि यह वास्तव में स्टैक के तहत और Cabal I के तहत आवश्यक नहीं था। सोचा कि यह ट्रेविस निर्माण विफलताओं में योगदान दे सकता है जैसे [यह एक] (https://travis-ci.org/wincent/docvim/jobs/137999458)। मैं कुछ समय पहले तक [एलटीएस रिज़ॉल्वर का उपयोग कर रहा था] (https://github.com/wincent/docvim/commit/06abd8de13238dbcd5f9ec5f26b543640be6dd4f) था। जैसा कि आप देख सकते हैं, रसोईघर में वास्तव में खाना पकाने के बारे में जानने के बिना बर्तनों को एक साथ धक्का देकर अंधा कर रहे हैं। – wincent

+2

रात के स्नैपशॉट्स को हटाया नहीं जाएगा, हालांकि अगर आपको रात में कुछ भी नहीं चाहिए तो एलटीएस का उपयोग करना एक अच्छा अभ्यास है। –

+1

आप stackage.org से अपने stack.yaml के रिज़ॉल्वर के लिए 'cabal.config' भी पकड़ सकते हैं। अपने वर्तमान स्नैपशॉट के लिए, आप 'https://www.stackage.org/nightly-2016-06-15/cabal.config' का उपयोग करेंगे। इसका मतलब है 'कैबल इंस्टॉल' सटीक उसी पैकेज संस्करणों का उपयोग 'स्टैक इंस्टॉल' के रूप में करेगा। –

संबंधित मुद्दे