2012-11-23 9 views
8

क्या किसी को पता है कि mod_wsgi स्वचालित रूप से फ़्लास्क ऐप को फिर से लोड कैसे करें जब कोई मॉड्यूल बदलता है? मैंने WSGIScriptReloading On की कोशिश की है, लेकिन कोई भाग्य नहीं है। official documentation एक भालू की तरह है ... मुझे लगता है कि अगर कोई जानता है तो मैं इसे एक स्टैब दूंगा। अग्रिम में धन्यवाद!स्रोत कोड में फ्लास्क + mod_wsgi स्वत: रीलोड

इसके अलावा, अगर यह वाक्यविन्यास त्रुटियों (जैसे फ्लास्क रीलोडर) पर स्थायी रूप से क्रैश नहीं हो सका, तो यह शानदार होगा।

उत्तर

0

आपका क्या मतलब है 'आधिकारिक दस्तावेज एक भालू है'? क्या शामिल नुस्खा साथ कुछ गड़बड़ है:

उस दस्तावेज़ में भी बताता है कि क्यों WSGIScriptReloading आप क्या उम्मीद नहीं करता है।

और सिंटैक्स त्रुटियों पर स्थायी रूप से क्रैश करना संभव नहीं है। यह अपाचे में एम्बेडेड है और अपाचे का पूरा बिंदु सामान चलाना है।

लगता है जैसे आपको विकास के लिए अपाचे/mod_wsgi का उपयोग नहीं करना चाहिए। हर कोई जानता है कि किसी को उत्पादन में स्वचालित स्रोत कोड रीलोडिंग का उपयोग नहीं करना चाहिए, इसलिए कल्पना नहीं करनी चाहिए कि आप ऐसा करना चाहते हैं।

+0

मुझे लगता है कि करने के लिए 'आधिकारिक दस्तावेज एक भालू की तरह है' करते हैं नीचे देखें सिर्फ "RTFM" पहले के लिए इतने पर whiner टिप्पणी के खिलाफ एक त्याग है। –

+0

ओह, उसका मतलब है कि कोई भी स्वचालित स्रोत कोड पुनः लोड करने के बारे में 2-3 घंटे बिताना नहीं चाहता है। –

+0

अधिकतर इन दिनों किसी भी व्यक्ति को पढ़ने और समझने के लिए परेशान नहीं किया जा सकता है। वे लोगों को उनके लिए शोध करने और उनकी सभी समस्याओं को हल करने की उम्मीद करते हैं। उन्हें क्या पता नहीं है कि वे समर्थन नेटवर्क को नष्ट कर रहे हैं जो मूल पैकेज लेखकों को उपयोगकर्ताओं की मदद करने के लिए परेशान नहीं किया जा सकता है क्योंकि उपयोगकर्ता पहले कोशिश करने और स्वयं की मदद नहीं करना चाहते हैं। –

11

mod_wsgi के साथ, WSGIScriptReloading कोड के बजाए .wsgi कॉन्फ़िगरेशन फ़ाइल में परिवर्तन की तलाश करता है।

मेरे कार्यप्रवाह फिर बस

$ touch MyWebApp.wsgi 

जो पिछले संशोधित फ़ाइल टाइमस्टैम्प बदलने के लिए कारण बनता है और mod_wsgi कोड को फिर से लोड करने के लिए अपने कोड में परिवर्तन अपलोड करने के लिए है।

आप अपनी स्थानीय मशीन पर .wsgi फ़ाइल को सहेजकर और फिर इसे अपलोड करके 'दूरस्थ रूप से' कर सकते हैं, या मैं इसे एसएसएच के माध्यम से कर सकता हूं।

वाक्यविन्यास त्रुटियों के बारे में आप बहुत कुछ नहीं कर सकते हैं, कोड या तो चल रहा है या यह नहीं है, लेकिन एक फिक्स प्लस touch इसे फिर से चलाएगा।

एक पकड़ लिया आप FTP के माध्यम से काम कर रहे हैं, तो के लिए बाहर देखने के लिए: यदि आप 'छुआ' .wsgi फ़ाइल पिछले अन्यथा यह कोशिश करते हैं और गलत कोड के साथ शुरू करेंगे अपलोड सुनिश्चित करें।

+2

ध्यान दें कि आप जो बात कर रहे हैं केवल mod_wsgi डिमन मोड के लिए काम करता है। –

+0

धन्यवाद, यह उत्तर मेरे लिए काम करता है – jonprasetyo

+0

@GrahamDumpleton यह आपकी स्वीकृति में mod_wsgi के साथ एक स्वीकार्य वर्कफ़्लो है? – johnny

1

मुझे लगता है कि यह उत्पादन में स्वचालित रूप से स्रोत कोड को पुनः लोड करना चाहते हैं, यह एक बहुत यथार्थवादी स्थिति है। ऐसे माहौल के बारे में सोचें जहां प्रति संस्करण स्रोतों को तैनात किया गया है और उन संस्करणों में से एक को 'उत्पादन' सिम्लिंक बिंदु। जब भी आप एक नया संस्करण जारी करना चाहते हैं, तो आप सिमलिंक को किसी अन्य पथ पर इंगित करें। लेकिन apache और mod_wsgi अभी भी symlinked निर्देशिका से फ़ाइलों को इकट्ठा करते हैं और इसके लिए टाइमस्टैम्प, आकार या डब्ल्यू/ई के आधार पर एक रीलोडिंग तंत्र की आवश्यकता होती है। निश्चित रूप से, एक आवेदन कोई समस्या नहीं हो सकती है, लेकिन 15-20 अनुप्रयोगों को होस्ट करने के बारे में क्या है जो सभी सक्रिय विकास से गुज़र रहे हैं? स्रोतों को स्वचालित रूप से पुनः लोड नहीं करना हर समय अपाचे को पुनरारंभ करने की तुलना में ऐसी स्थिति में शुद्ध नुकसान होता है।

प्रश्न पर वापस अगर ढांचे का उपयोग कर रहे हैं (इस मामले फ्लास्क में) एक प्लगइन या स्वचालित स्रोत कोड reloading के लिए जगह में उपकरण नहीं है, तो आपके पास दो विकल्प ग्राहम और Malphas द्वारा वर्णित अपने सबसे अच्छे विकल्प हैं । या तो निगरानी प्रणाली को पुनरारंभ या कार्यान्वित करने के लिए wsgi प्रक्रिया को ट्रिगर करें।

1

आप WSGIScriptReloading निर्देश जोड़ने के बारे में सही हैं। फ्लास्क दस्तावेज़ इसे 100% स्पष्ट नहीं करते हैं, लेकिन अपाचे आपकी .wsgi फ़ाइल में परिवर्तन की तलाश में है। अनुशंसित समाधान आपकी रिलीज प्रक्रिया के हिस्से के रूप में, अपनी .wsgi फ़ाइल पर टच कमांड निष्पादित करना है।

0

उत्पादन के लिए मैं apache mod_wsgi भी पसंद करता हूं, जबकि विकास के लिए मैं फ्लास्क के अंतर्निर्मित सर्वर का उपयोग करता हूं। मैं प्रोड और देव कॉन्फ़िगरेशन फ़ाइलों को अलग करता हूं और मैंने देव कॉन्फ़िगरेशन में debug निर्देश True निर्देशित किया है ताकि फ्लास्क स्वचालित रूप से कोड परिवर्तनों को पहचान और पुनः लोड कर सके।

+0

विकास के लिए mod_wsgi-express का उपयोग करने पर विचार करें। इसके बारे में हालिया पोस्ट के लिए मेरे ब्लॉग को देखें और आने वाले लोगों की तलाश करें जो विकास वातावरण में इसका उपयोग करने के बारे में अधिक बात करते हैं। –

0

इस प्रश्न का सही उत्तर यह है कि WSGIScriptReloading On को /etc/apache2/sites-enabled फ़ोल्डर के तहत 000-default.conf में जोड़ा जाना आवश्यक है।

उदाहरण

<VirtualHost *:80> 
     # The ServerName directive sets the request scheme, hostname and port that 
     # the server uses to identify itself. This is used when creating 
     # redirection URLs. In the context of virtual hosts, the ServerName 
     # specifies what hostname must appear in the request's Host: header to 
     # match this virtual host. For the default virtual host (this file) this 
     # value is not decisive as it is used as a last resort host regardless. 
     # However, you must set it for any further virtual host explicitly. 
     #ServerName www.example.com 

     ServerName sentiments.live 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html 
     WSGIDaemonProcess flaskapp threads=5 
     WSGIScriptAlias//var/www/html/sentiments/flaskapp.wsgi 

     <Directory sentiments> 
       WSGIScriptReloading On 
       WSGIProcessGroup sentiments 
       WSGIApplicationGroup %{GLOBAL} 
       Order deny,allow 
       Allow from all 
     </Directory> 
+0

आपको 'WSGIScriptReloading चालू' की आवश्यकता नहीं है क्योंकि यह डिफ़ॉल्ट सेटिंग है। अधिक जानकारी के लिए http://modwsgi.readthedocs.io/en/develop/user-guides/reloading-source-code.html –

+0

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

+0

'WSGIProcessGroup'' के लिए तर्क भी आपके द्वारा' WSGIDaemonProcess'' के लिए उपयोग किए गए नाम से मेल नहीं खाता है, इसलिए उस नाम के किसी अन्य स्थान पर परिभाषित होने पर गलत डिमन प्रक्रिया समूह में विफल या मिलान होगा। –

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