स्रोत परिवर्तन पर gunicorn ऑटोरैलोएड


113

अंत में मैंने अपने विकास एनवी को रनसरवर से ग्नोर्नॉर्न / नग्नेक्स में स्थानांतरित कर दिया।

यह करने के लिए सुविधाजनक होगा करने के लिए धावक के ऑटोरेलोड सुविधा को gunicorn को दोहराने के लिए, इसलिए सर्वर स्वचालित रूप से पुनरारंभ होता है जब स्रोत बदलता है। अन्यथा मुझे सर्वर को मैन्युअल रूप से पुनः आरंभ करना होगा kill -HUP

मैनुअल रीस्टार्ट से बचने का कोई तरीका?


इरेटा: मेरे env gunicorn में पर्यवेक्षक द्वारा प्रबंधित / निगरानी की जाती है, इसलिए मैं वास्तव kill -HUPमें PID की प्रक्रिया नहीं करूंगा , लेकिन इसके बजाय पर्यवेक्षक का उपयोग करें। हालांकि यह बहुत परिवर्तन नहीं लगता है।
पाओलो

3
github.com/benoitc/gunicorn/issues/154 के पास कुछ उपाय हैं
KZ

जवाबों:


232

हालांकि यह पुराना सवाल है, सिर्फ स्थिरता के लिए - संस्करण 19.0 के बाद से gunicorn का --reloadविकल्प है। इसलिए किसी तीसरे पक्ष के उपकरण की अधिक आवश्यकता नहीं है।


5
माना। अन्य उत्तर काम कर सकते हैं, लेकिन यह अब तक का सबसे सरल है और यह वर्कअराउंड नहीं है। यह वही है जो ओपी चाहता था।
J-bob

1
मैं नहीं मानता कि एक --reload विकल्प है जिसे gunicorn में बनाया गया है। आपको यह कहां से मिला? उनके डॉक्स कॉन्फिग को फिर से लोड करने के लिए कहते हैं, एक HUP भेजें ( killall -HUP procnameठीक काम करेगा) नए श्रमिकों को शुरू करने के लिए और पुराने लोगों को शालीनतापूर्वक बंद कर दें।
सोफी

3
धन्यवाद @Guandalino, मैं इसे याद किया होगा। हालांकि, ध्यान दें कि वे कहते हैं "यह सेटिंग विकास के लिए है।" यह स्पष्ट रूप से कुछ मामलों में उत्पादन के लिए काम करेगा, लेकिन कई अन्य लोगों के लिए भी समस्याग्रस्त हो सकता है। हां, मैंने नीचे देखा कि आप उत्पादन / तैनाती में अविचलित हैं।
सोफी

उत्पादन सर्वर के लिए इसे आसान तरीके से कैसे करें?
जुआन इज़ाज़ा

@juanIsaza आपको उत्पादन पर ऐसी कार्यक्षमता का उपयोग कभी नहीं करना चाहिए। यदि आपको लगता है कि आपको इसकी आवश्यकता है - आपको देव या तैनाती के लिए अपने दृष्टिकोण पर पुनर्विचार करने की आवश्यकता है।
दिमित्री ज़ोलकोवस्की

20

एक विकल्प यह होगा कि स्टार्टअप विकल्प में जोड़कर केवल एक अनुरोध परोसने के लिए प्रत्येक प्रक्रिया को सीमित करने के लिए --मैक्स-अनुरोधों का उपयोग किया जाए--max-requests 1 । हर नव-प्रायोजित प्रक्रिया को आपके कोड में बदलाव देखने चाहिए और विकास के माहौल में प्रति अनुरोध अतिरिक्त स्टार्टअप समय नगण्य होना चाहिए।


1
देव env के लिए अच्छा, सुरुचिपूर्ण चाल। ठेस पर इस्तेमाल नहीं किया जा सकता ... लेकिन आप वैसे भी ठेस पर ऑटोरेलोड नहीं चाहते हैं, जब तक कि आप "निरंतर तैनाती" न करें। यदि आप करते हैं, ब्रायन Helmig के दृष्टिकोण बेहतर भले ही यह की आवश्यकता है pip, सक्षम पैकेज watchdog
hobs

2
एक नए कार्यकर्ता को बूट करने में ~ 3 सेकंड का समय लगेगा, जो मेरे लिए बहुत धीमा है। (मध्य 2009 MBP)
Blaise

11

ब्रायन हेल्मिग इसके साथ आए और मैंने इसे सीधे run_gunicornलॉन्च करने के बजाय इसका उपयोग करने के लिए संशोधित किया gunicorn, जिससे यह संभव हो सके कि इन 3 कमांडों को अपने django प्रोजेक्ट रूट फ़ोल्डर में शेल में पेस्ट करें (आपके वर्चुअन सक्रिय के साथ):

pip install watchdog -U
watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . &
python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid

बस इसे अपने लिए फेडोरा 15 पर Django 1.5.4, gunicorn 18.0, watchdog 0.6, bash 4.2 के साथ उपयोग किया।
hobs

127.0.0.1:80जरूरत पड़ने पर अपने IP या FQDN और पोर्ट को लगाना न भूलें ।
हॉब्स

1
@Guandalino, किसी भी भाग्य? यह मेरे लिए कुछ हफ़्ते से अच्छा काम कर रहा है। जब भी मैं बदलता हूं settings.py, तब केवल मुझे मैन्युअल रूप से पुनरारंभ करने की models.pyआवश्यकता होती है , (माइग्रेशन आवश्यक), या कुछ बाहरी एप्लिकेशन का स्रोत कोड मेरे watchmedoपैटर्न में नहीं ।
hobs

याद दिलाने के लिए शुक्रिया। लेकिन मैं अपना वोट दूसरे की सफलता पर नहीं डालना चाहता। यह (अनावश्यक) जल्दी क्यों? क्या मैं कुछ StackOverflow नियम का उल्लंघन कर रहा हूँ? यदि हां, तो कृपया मुझे बताएं कि कैसे निस्तारण किया जाए।
पाओलो

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

5

मैं git पुश का उपयोग उत्पादन में तैनात करने और स्क्रिप्ट चलाने के लिए git हुक को सेट करने के लिए करता हूं। इस दृष्टिकोण का लाभ यह है कि आप एक ही समय में अपना माइग्रेशन और पैकेज इंस्टॉलेशन भी कर सकते हैं। https://mikeeverhart.net/2013/01/using-git-to-deploy-code/

mkdir -p /home/git/project_name.git
cd /home/git/project_name.git
git init --bare

फिर एक स्क्रिप्ट बनाएं /home/git/project_name.git/hooks/post-receive

#!/bin/bash
GIT_WORK_TREE=/path/to/project git checkout -f
source /path/to/virtualenv/activate
pip install -r /path/to/project/requirements.txt
python /path/to/project/manage.py migrate
sudo supervisorctl restart project_name

सुनिश्चित करें कि chmod u+x post-receive, और sudoers में उपयोगकर्ता जोड़ें। इसे sudo supervisorctlबिना पासवर्ड के चलने दें । https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/

मेरे स्थानीय / विकास सर्वर से, मैंने सेट किया git remoteहै जो मुझे उत्पादन सर्वर पर धकेलने की अनुमति देता है

git remote add production ssh://user_name@production-server/home/git/project_name.git

# initial push
git push production +master:refs/heads/master

# subsequent push
git push production master

एक बोनस के रूप में, आपको सभी प्रॉम्प्ट देखने को मिलेंगे क्योंकि स्क्रिप्ट चल रही है। तो आप देखेंगे कि क्या माइग्रेशन / पैकेज इंस्टालेशन / सुपरवाइजर रीस्टार्ट के साथ कोई समस्या है।


नोट के #!/bin/bashरूप में शेबंग का उपयोग करने के लिए नोट किया गया है #!/bin/shजिसके बजाय Git का post-receiveउदाहरण था!
१६:५० पर curtisp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.