2009-03-17 13 views
45

मुझे अभी तक अपने पर्ल अनुप्रयोगों के विकास, निर्माण और तैनाती को प्रबंधित करने के लिए एक संतोषजनक तरीका नहीं आया है। मैं यह जानना चाहता हूं कि आपने इस समस्या को हल किया है और/या आप एक अनुप्रयोग निर्माण प्रणाली में क्या चाहते हैं जो आपके पास नहीं है।अपने पर्ल एप्लिकेशन विकास, निर्माण और तैनाती का प्रबंधन कैसे करें?

कृपया अपने एप्लिकेशन प्रकार का वर्णन करें (क्या यह एक वेब ऐप है, क्या यह सर्वर पर चलता है, या आप इसे PAR या PerlApp का उपयोग करके बंडल करते हैं ताकि आप पेलेस सिस्टम पर चल सकें)।

कुंजी बातें निर्माण प्रणाली प्रदान करना चाहिए:

  • पुस्तकालयों का नियंत्रण।
    • मेरे निर्माण में इसका उपयोग करने के लिए मेरी dev निर्देशिका में लाइब्रेरी वितरण की जांच करना संभव होना चाहिए।
    • @INC मान के साथ perl निष्पादित करना आसान होना चाहिए जो उपयुक्त निर्देशिकाओं का उपयोग करेगा।
    • सिस्टम perl इंस्टॉल से प्राप्त किए जा रहे मॉड्यूल की एक सूची प्राप्त करना संभव होना चाहिए।
  • Makefile/बिल्ड एकीकरण
    • यह केवल एक make test या इसी तरह के आदेश जारी करके पूरे आवेदन भर में एक वैश्विक परीक्षण करना आसान होना चाहिए।
  • संस्करण नियंत्रण अनुकूल
    • संरचना सीवीएस, SVN के सामान्य उपयोग और अन्य संस्करण नियंत्रण प्रणाली के साथ हस्तक्षेप नहीं करना चाहिए।
  • क्रॉस मंच
    • सिस्टम कम से कम Win32 और यूनिक्स व्युत्पन्न प्रणालियों पर काम करना चाहिए।
    • आदर्श रूप से, उपकरण उन सभी स्थानों पर समान रूप से कार्य करना चाहिए जहां perl संचालित होता है।
  • एकल पर्ल स्थापित
    • यह पर्यावरण की स्थापना के हिस्से के रूप में एक विशेष निर्देशिका में पर्ल स्थापित करने के लिए आवश्यक नहीं होना चाहिए।
  • आसान अप
    • शुरू एक आवेदन शुरू एक ज्यादातर स्वचालित प्रक्रिया होनी चाहिए। मॉड्यूल :: स्टार्टर या एच 2 एक्स की लाइनों के साथ कुछ बुनियादी संरचना को लेआउट के लिए उपलब्ध होना चाहिए और किसी भी मानक फाइलें बनाना चाहिए।

Perlmonks में पार किया।

उत्तर

17

एक बहुत है कि मैं पुस्तकालयों की इस

  1. नियंत्रण के बारे में लिख सकता है नहीं है - मैं सिर्फ मॉड्यूल मैं चाहता हूँ के साथ CPAN के अपने खुद के संस्करण बना। App::Cpan के नवीनतम संस्करणों में इसकी सहायता के लिए, एक बार कॉन्फ़िगरेशन लोड करने के लिए -j विकल्प जैसी कई सुविधाएं हैं। एक बार आपके पास यह हो जाने के बाद, आप इसे अंगूठे ड्राइव या सीडी पर वितरित कर सकते हैं जिसमें सभी मॉड्यूल, CPAN.pm कॉन्फ़िगरेशन और अन्य सभी चीजें हैं जो आपको चाहिए। थोड़ा प्रोग्रामिंग के साथ आप run_me स्क्रिप्ट बनाते हैं जो इसे सब कुछ करता है।

  2. मेकफ़ाइल/बिल्ड एकीकरण - मैं मेकफ़ाइल को एकीकृत नहीं करता हूं। यह आपदा की राह है। इसके बजाय, मैं शीर्ष-स्तरीय एप्लिकेशन मॉड्यूल के साथ एकीकरण परीक्षण करता हूं, जो स्वचालित रूप से इसकी सभी निर्भरताओं का भी परीक्षण करता है। -t cpan कमांड पर स्विच वर्तमान कार्य निर्देशिका में मॉड्यूल का परीक्षण करने के लिए उपयोगी है:

    cpan -t।

विभिन्न इंटरगेशन परीक्षण ढांचे हैं जिनका आप भी उपयोग कर सकते हैं। आप PERL5LIB को कुछ खाली पर सेट करते हैं (केवल हार्ड-कोडित @INC निर्देशिकाओं में कोर मॉड्यूल के साथ) ताकि cpan को स्क्रैच से सब कुछ इंस्टॉल करना होगा।

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

  2. क्रॉस प्लेटफ़ॉर्म - मैंने जो कुछ भी उल्लेख किया है वह विंडोज और यूनिक्स पर ठीक काम करता है।

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

  4. आसान शुरुआत - यह प्रोग्रामिंग का एक साधारण मामला है।

बोनस: मैं मॉड्यूल :: स्टार्टर का उपयोग नहीं करता हूं। यह गलत तरीका है क्योंकि आपको यह निर्भर करना होगा कि मॉड्यूल :: स्टार्टर क्या सोचता है कि आपको क्या करना चाहिए। मैं Distribution::Cooker का उपयोग करता हूं जो केवल टेम्पलेट टूलकिट टेम्पलेट्स की निर्देशिका लेता है और उन्हें अपनी वितरण निर्देशिका देने के लिए प्रक्रिया करता है। आप जो भी चाहें कर सकते हैं। आप प्रारंभिक टेम्पलेट्स कैसे प्राप्त करते हैं आप पर निर्भर करता है।

+0

महान प्रतिक्रिया, धन्यवाद। एक प्रणाली जो मेरे लिए काम करेगी वह चीजों को साइट पर स्थापित नहीं करनी चाहिए, और एक सिस्टम पर्ल के साथ सह-अस्तित्व में सक्षम होना चाहिए। ActivePerl के पुराने संस्करणों के साथ मेरा काम यह एक पूर्ण आवश्यकता बनाता है। जहां संभव हो, मैं सहमत हूं कि एक अलग perl का उपयोग करना सबसे अच्छा है। – daotoad

7

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

हम तीन चीजें हैं जो हम हमारी वेबसाइट स्थापित करने के लिए कर रही है की जरूरत है:

  1. एक पर्ल मॉड्यूल Module::Starter का उपयोग कर, एक Config मॉड्यूल जो साइट-व्यापी कॉन्फ़िगरेशन विकल्प रखती युक्त बनाया है। स्थापना पर, यह मॉड्यूल (MakeMaker के PREREQ_PM का उपयोग करके यह जांचने के लिए कि हमारे द्वारा आवश्यक सभी मॉड्यूल पहले से ही स्थापित किए जा चुके हैं)। इस मॉड्यूल से पहले स्थापित करने के लिए कोई भी मॉड्यूल स्थापित नहीं किया जा सकता है।
  2. कुछ SQL फ़ाइलें जिन्हें डेटाबेस सेट अप करने के लिए निष्पादित करने की आवश्यकता है।
  3. पर्ल सीजीआई फाइलें जो वेबसाइट बनाती हैं। जब तक अपाचे उन्हें इंगित करता है, वेबसाइट "बस काम करती है"। इसमें सभी पर्ल फाइलों द्वारा उपयोग किए जाने वाले सामान्य कोड मॉड्यूल शामिल हैं।

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

आपके मानदंडों को यह तुलना: पुस्तकालयों में से

  1. नियंत्रण: कुछ हद तक। हम काफी व्यापक रूप से सीपीएएन मॉड्यूल का उपयोग करते हैं। एक नया संस्करण आज़माने के लिए, हम उत्पादन सर्वर पर अपग्रेड करने से पहले मॉड्यूल के अपने संस्करण को अपग्रेड करते हैं। हम मैन्युअल रूप से एक सूची बनाए रखते हैं, लेकिन चूंकि हमारा कोडबेस काफी छोटा है, उदाहरण के लिए use से शुरू होने वाली लाइनों के लिए grep आईएनजी के माध्यम से कौन से मॉड्यूल का उपयोग किया जा रहा है, यह पता लगाना मुश्किल नहीं है)।
  2. मेकफ़ाइल/बिल्ड एकीकरण: हां। कोई भी मेकफ़ाइल संबंधित सामान हमारे ईयू :: एमएम सेटअप द्वारा किया जाता है। हमारे पास वैश्विक परीक्षण नहीं हैं, लेकिन चूंकि हमारा पूरा परीक्षण सूट हाल ही में एक फ़ोल्डर में समाप्त हो गया है, उम्मीद है कि हमारे पास जल्द ही कुछ ऐसा होगा जो आप सीधे prove चला सकते हैं।
  3. संस्करण नियंत्रण अनुकूल: हाँ। हमारा पूरा स्रोत कोड बहुत अधिक डुप्लिकेशंस के बिना, एक फ़ोल्डर में निहित है।
  4. क्रॉस प्लेटफ़ॉर्म: हाँ। मेकमेकर में हमें ऐसा करने की इजाजत देने के लिए बहुत सारी अजीब चीज़ें मिल रही हैं, लेकिन स्टार्टअप के रूप में, क्रॉस-प्लेटफ़ॉर्म कोड होने से हमें मूल्यवान लचीलापन मिलता है। हम जितना संभव हो सके सीपीएएन से पर्ल के कोर मॉड्यूल और टूल्स, और शुद्ध पर्ल मॉड्यूल का उपयोग करने का प्रयास करते हैं।
  5. एकल पर्ल इंस्टॉल: हाँ। हम पर्ल को कहीं भी रखते हैं, और किसी भी सेटिंग के तहत स्थापित कर सकते हैं, जब तक कि पर्ल के सभी मॉड्यूल टूल काम कर सकें - CPAN, EU::MM और अन्य सभी प्रणालियों में अच्छी तरह से काम करने में बहुत सारे प्रयास किए गए हैं, और यह एक शर्म की बात है इसे बर्बाद करने के लिए।
  6. आसान शुरुआत: वास्तव में नहीं। इस प्रणाली को विकसित किया गया था (यानी: समझदारी से डिजाइन नहीं किया गया था) सभी स्रोत फ़ाइलों के एक फ़ोल्डर से और एक मॉड्यूल की सूची के साथ एक पाठ फ़ाइल जिसे स्थापित करने की आवश्यकता है। जबकि स्थापित मॉड्यूल के लिए औपचारिक परीक्षण एक बड़ा सुधार है, यह अभी भी इसे स्थापित करने के लिए एक दिन की तरह कुछ लेता है, मुख्य रूप से हमारे पूर्ववर्ती मॉड्यूल स्थापित करने में खर्च करता है (उन सभी को विंडोज़ पर स्थापित करना आसान नहीं है)। मैं the Perl Win32 community का उपयोग करने की उम्मीद कर रहा हूं ताकि समस्याग्रस्त सीपीएएन मॉड्यूल के साथ समस्याएं आ सकें।

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

+0

मैं समान चीजें कर रहा हूं, और यह सब मुझे मैन्युअल और त्रुटि प्रवण के रूप में हमला करता है। मैंने कुछ समय के साथ चीजों को विकसित किया है, लेकिन मुझे कई अनुप्रयोगों का समर्थन करना है, इसलिए मैं बहुत सारे बदलाव करने के इच्छुक नहीं हूं। – daotoad

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