2010-04-09 10 views
17

के बाद एसवीएन से एफ़टीपी का उपयोग कर दूरस्थ सर्वर पर PHP तैनाती मुझे प्रत्येक प्रतिबद्धता के बाद एसवीएन से एफ़टीपी का उपयोग कर रिमोट सर्वर पर PHP तैनाती के लिए समाधान नहीं मिला। कैसे मैं केवल जोड़ा या संपादित फ़ाइलें एफ़टीपी द्वारा सर्वर पर अपलोड और SVN से हटाई गई फ़ाइलों के बारे में मैं लिखने के बाद प्रतिबद्ध स्क्रिप्ट लगता है हटा सकते हैं ...प्रत्येक प्रतिबद्धता

+2

पोस्ट-स्क्रिप्ट स्क्रिप्ट हुक सही है, लेकिन आपको एफ़टीपी का उपयोग नहीं करना चाहिए बल्कि नए होस्ट को स्थानांतरित करने के लिए rsync का उपयोग नहीं करना चाहिए। एफ़टीपी निर्धारित नहीं कर सकता कि क्या संपादित किया गया था और क्या नहीं था। पेकका ने चेकआउट फ़िंग का सुझाव दिया और यह ब्लॉग पोस्ट: http://blog.fedecarg.com/2008/07/21/filesynctask-using-phing-to-synchronize-files-and-directories/ – Gordon

+1

यदि आप कर सकते हैं, तो उपयोग करने पर विचार करें आपके रिमोट सर्वर पर एसवीएन भी। इसे केवल पढ़ने के लिए प्रतिबंधित पहुंच दें और रिपोजिटरी पर एक पोस्ट-प्रतिबद्ध हुक स्थापित करें जो रिमोट सर्वर को पहले वापस करने के लिए सूचित करता है और फिर अपनी कार्यशील प्रति अपडेट करता है। इस मामले में, आप किसी भी '.svn' फ़ोल्डर में वेब पहुंच से इनकार करना भी चाह सकते हैं। इसके अतिरिक्त, यह सुनिश्चित करने के लिए शाखाओं का उपयोग करने पर विचार करें कि सर्वर ट्रंक से प्रत्येक प्रतिबद्धता की जांच नहीं करता है। – Archimedix

+0

मुझे विश्वास नहीं है कि समाधान को PHP आधारित होने की आवश्यकता है, केवल एक PHP वेबसाइट के हस्तांतरण के लिए। –

उत्तर

13

अच्छा प्रश्न है!

मुझे यकीन नहीं है कि फाइलों को सिंक्रनाइज़ करने के लिए एक PHP-only दृष्टिकोण मौजूद है।

मैं आमतौर पर सिंक्रनाइज़िंग भाग करने के लिए rsync या ScriptFTP (वाणिज्यिक) जैसे तृतीय-पक्ष एफ़टीपी सिंक टूल का उपयोग करता हूं।

phing पर एक नज़र डालें, इसके लिए कई एफ़टीपी एक्सटेंशन (जिन्हें "कार्य" कहा जाता है) हैं। हालांकि उनके पास उनके साथ कोई वास्तविक दुनिया का अनुभव नहीं है।

इस ब्लॉग पोस्ट विचारों के एक नंबर प्रदान करता है और दृष्टिकोण: Using phing to sync files with shared hosting

+0

मैं फ़िंग लेकिन चींटी का उपयोग नहीं कर रहा हूं, और परिणाम यह है कि मैं केवल सभी नए स्रोतों को एसवीएन से रिमोट सर्वर पर कॉपी कर सकता हूं। नई प्रतिबद्धता से फ़ाइलों को सिंक्रनाइज़ न करें। रिमोट सर्वर विंडोज ओएस हो सकता है इसलिए मैं rsync का उपयोग नहीं कर सकता। मैं बस Springloops.com की तैनाती प्रक्रिया को अनुकरण करना चाहता हूं, वे बस ऐसा करने में बिल्कुल सही हैं। – user312729

6

आप FTP के माध्यम से एक सर्वर के लिए हर प्रतिबद्ध फ़ाइल अपलोड करने की svn2web इस्तेमाल कर सकते हैं। Svn2web php-scripts का संग्रह है जिसे आप svn hooks के रूप में उपयोग कर सकते हैं। आप निर्देशिका पर एक svn संपत्ति के रूप में ftp-server का पता, उपयोगकर्ता नाम और पासवर्ड सेट कर सकते हैं। बहुत अच्छा काम करता है!

+0

आपके उत्तरों के लिए धन्यवाद। लेकिन प्रतिबद्धता svn पर कुछ फाइलों को हटा सकते हैं। और मुझे तैनाती सर्वर के साथ svn सिंक्रनाइज़ करने की आवश्यकता है। – user312729

+0

अगर आप अपने भंडार में फ़ाइलों को हटाते हैं svn2web ftp पर भी उन्हें हटा देगा। क्या यह अच्छी बात नहीं है? – murze

0

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

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

हम वर्तमान में उत्पादन में वर्णित दृष्टिकोण को शामिल कर रहे हैं पर्यावरण और सेटअप इस प्रकार है:

  • एक प्रतिबद्ध ट्रंक
    • इससे पहले कि यह वास्तव में प्रतिबद्ध है, परीक्षण कोड पर दौड़ा रहे हैं अगर सब कुछ काम करता है
  • देखने के लिए में चला जाता है
  • कई के बाद करता है एक तैनाती आता है (आम तौर पर डेवलपर की देखरेख)
    • टेस्ट फिर से चलाए जा रहे हैं
    • वे सफल हो जाते हैं - सब ठीक
    • अगर वे विफल, वर्ष निर्यात लौट आता है और साइट एक बार पूरी तरह चालू है फिर

यह सब PHP में लिखा है, standart सांत्वना आदेशों का उपयोग करके।

+0

मैं रिमोट परिनियोजन फ़ोल्डर में svn पर नए संस्करण में सभी फ़ाइलों को निर्यात नहीं करना चाहता हूं। मैं बस नई फाइल अपलोड करके सिंक्रनाइज़ करना चाहता हूं, संपादित फ़ाइल को ओवरराइट कर सकता हूं और प्रतिबद्धता के अनुसार फ़ाइलों को भी हटा सकता हूं। कृपया मुझे एक उदाहरण दिखाएं – user312729

+3

वैसे तो, आप अपनी उत्पादन वेबसाइट को svn चेकआउट क्यों नहीं बनाते हैं और जब आप प्रतिबद्ध करते हैं तो बस इसे अपडेट करें? इसके अलावा आपको .svn फ़ोल्डरों तक पहुंच प्रतिबंधित करनी चाहिए और यह ठीक वैसे ही काम करेगा जैसा आप चाहते हैं। और यदि एसवीएन रिपोजिटरी उसी सर्वर पर है, तो वेब साइट के रूप में यह आसान/पथ/to_svn/repos/someproject/hooks/post-commit जैसा दिखता है: #!/Bin/bash svn अद्यतन/पथ/से/वेबसाइट और इसे निष्पादन योग्य बनाओ। – bisko

3

मैं http://svn2ftp.com का उपयोग करता हूं जो एक एसवीएन होस्ट है जो प्रत्येक प्रतिबद्धता पर एस/एफ़टीपी को दूरस्थ तैनाती की अनुमति देता है!

3

यदि आप अपने आप से स्क्रिप्ट प्रबंधित नहीं करना चाहते हैं, लेकिन बस कुछ काम करना चाहते हैं, तो आप एक होस्टेड सेवा का उपयोग करने का प्रयास कर सकते हैं। मैं Deploy का उपयोग करता हूं, जो आपके द्वारा वर्णित परिदृश्य के लिए पूरी तरह से काम करता है। और यदि आपके पास केवल एक प्रोजेक्ट तैनाती है, तो यह भी निःशुल्क है।

1

क्या आपने Beanstalk देखा है? यह आपको एक क्लिक में अपने एफ़टीपी सर्वर पर अपने सबवर्जन और गिट परियोजनाओं को तैनात करने देता है। हालांकि यह मुफ्त नहीं है। एक और मुफ़्त विकल्प एक निरंतर एकीकरण सर्वर स्थापित करना होगा जो आपके तैनाती करने के लिए एक रेक स्क्रिप्ट चलाएगा।

2

हमारे php प्रोजेक्ट के लिए हम जेनकींस को निरंतर एकीकरण टूल का उपयोग करते हैं। हमारा भंडार सर्वर उपversण है। जब भी हम कोड बदलते हैं, हम बीटा स्टेजिंग & लाइव वातावरण के साथ विलय करने के लिए जेनकींस नौकरियों का उपयोग करते हैं और फिर एप्लिकेशन को तैनात करते हैं।

आप http://www.michaelpeacock.co.uk/blog/entry/jenkins-ci-an-introduction-for-php-developers

+1

मुझे आपका जवाब पसंद है, इस प्रकार आपके पास मेरा बक्षीस है। –

+0

धन्यवाद मार्क .... :) –

1

पर जेनकींस का उपयोग कर PHP आवेदन तैनाती के बारे में अधिक जानकारी तुम क्या कहते हो, तो आप you'r सर्वर से SVN से चेकआउट, (SVN से उत्पादन सर्वर के लिए काम कर रहे प्रतिलिपि बनाने) प्राप्त कर सकते हैं, और जब भी आप एक नया संस्करण तैनात करना चाहते हैं, तो आप बस एसएसएच के माध्यम से सर्वर से कनेक्ट होते हैं और svn update टाइप करते हैं, और वहां आप जाते हैं, केवल नवीनतम फाइलें जिन्हें संपादित किया जा रहा है, तैनात किए जा रहे हैं, और कम में एक सेकंड में उत्पादन में अद्यतन नवीनतम संस्करण।