2012-09-02 8 views
6

ओएस एक्स 10.8.1 के साथ भेजे गए एक की तुलना में होमब्री या पायथन के एक अलग स्वाद के बिना ओएस एक्स सर्वर 2.0 पर एक Django एप्लिकेशन कैसे तैनात करेगा? मैं एक Django अनुप्रयोग में कोको बाइंडिंग का उपयोग कर रहा हूं और इसे अपने डेस्कटॉप मशीन पर होमब्री के साथ काम करने में परेशानी हो रही है (ओएस एक्स 10.8.1 चल रहा है); इसलिए पायथन के सिस्टम स्थापित संस्करण पर एप्लिकेशन को तैनात करने का अनुरोध।ओएस एक्स सर्वर पर एक django एप्लिकेशन कैसे तैनात करता है?

  • ओएस एक्स 10.8.1
  • OS X सर्वर 2.0
  • अजगर 2.7.2
  • अपाचे 2.2:

    मैं निम्नलिखित पहले से ही स्थापित के साथ निम्न OS X सर्वर वातावरण है।

    012,351: 22

Django 1.4.1 निम्न आदेश का उपयोग कर स्थापित किया गया था

sudo easy_install django 

मेरा पहला प्रयास एक खाली वेबसाइट को तैनात करना है, और एक बार यह सफल होने के बाद, उत्पादन में उपयोग किए जाने वाले वास्तविक एप्लिकेशन को तैनात करना है। परियोजना /Library/Server/Web/Data/WebApps/mysite/ पर बनाया गया था निम्न आदेश

django-admin.py startproject mysite 

का उपयोग कर रहा निम्न आदेश का उपयोग कर आवेदन भाग गया। यह बस पुष्टि की कि आवेदन ऊपर और चल रहा था। यह मानक है "यह काम किया!" पृष्ठ जब आपने पहली बार एक प्रोजेक्ट बनाया था।

python manage.py runserver 8080 

मैं तो निम्न सामग्री के साथ एक फ़ाइल /Library/Server/Web/Config/apache2/httpd_mysite.conf बनाया:

WSGIScriptAlias /mysite /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py 

मैं आगे निम्नलिखित सामग्री के साथ एक फ़ाइल /Library/Server/Web/Config/apache2/webapps/com.example.mysite.wsgi.plist बनाया:

<?xml version="1.0" encoding="UTF-7"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>name</key> 
     <string>com.example.mysite.wsgi</string> 
     <key>displayName</key> 
     <string>Python "My Site" app</string> 
     <key>launchKeys</key> 
     <array/> 
     <key>proxies</key> 
     <dict/> 
     <key>installationIndicatorFilePath</key> 
     <string>/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py</string> 
     <key>includeFiles</key> 
     <array> 
       <string>/Library/Server/Web/Config/apache2/httpd_mysite.conf</string> 
     </array> 
     <key>requiredModuleNames</key> 
     <array> 
       <string>wsgi_module</string> 
     </array> 
</dict> 
</plist> 

फ़ाइल com.example.mysite.wsgi.plistcom.apple.webapp.wsgi.plist से अनुकूलित किया गया था और httpd_mysite.confhttpd_wsgi.conf से अनुकूलित किया गया। सर्वर मैनेजर के माध्यम से कॉन्फ़िगर किए जाने पर इन दोनों फ़ाइलों का उपयोग "स्टैंडअलोन" पायथन एप्लिकेशन को सफलतापूर्वक चलाने के लिए किया जाता है।

मैंने सर्वर प्रबंधक के साथ एक साइट बनाई, पुष्टि की कि मेरा आवेदन वेब अनुप्रयोगों की सूची में था। हालांकि, जब मैं http://example.com/mysite पर जाता हूं तो मुझे 500 त्रुटि मिलती है।

[Sat Sep 01 21:49:17 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366) 
[Sat Sep 01 21:49:17 2012] [notice] Apache/2.2.22 (Unix) PHP/5.3.13 with Suhosin-Patch mod_wsgi/3.3 Python/2.7.2 mod_fastcgi/2.4.6 mod_ssl/2.2.22 OpenSSL/0.9.8r DAV/2 configured -- resuming normal operations 
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] (8)Exec format error: exec of '/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py' failed 
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] Premature end of script headers: wsgi.py 

यह प्रतीत नहीं होता कि WSGI मॉड्यूल अनुरोध पर कार्य कर रहा है, लेकिन इसके बजाय, अनुरोध FCGI का उपयोग कर कार्रवाई की जा सकती है: लॉग निम्न प्रविष्टियों (IP पते गोपनीयता कारणों 1.2.3.4 के लिए बदल दिया है) । हालांकि, लॉग इंगित करता है कि mod_wsgi/3.3 लोड किया गया था।

जब मैं एक मानक पायथन अनुप्रयोग है कि इस प्रकार दिखता बनाया:

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 

    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 

    return [output] 

और फिर /Library/Server/Web/Data/WebApps/helloworld.wsgi बजाय /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py को इंगित करने के लिए "नमस्ते विश्व" प्रदर्शित किया जाता है फ़ाइलों का अद्यतन। इसलिए मैं मानता हूं कि wsgi सही ढंग से कॉन्फ़िगर किया गया है और अनुप्रयोगों को निष्पादित करने में सक्षम है और मेरे सेटअप के साथ कुछ और गलत है।

उत्तर

0

distros के साथ कुछ अपाचे विन्यास या तो सीजीआई या FastCGI को .py नक्शा और इस mod_wsgi का उल्लंघन करेगा। यही कारण है कि mod_wsgi एक .wsgi एक्सटेंशन का उपयोग करने की सिफारिश करता है। तो, 'site.wsgi' पर 'wsgi.py' का नाम बदलें और फिर WSGIScriptAlias ​​में 'site.wsgi' का उपयोग करें।

बीटीडब्ल्यू, क्या आप पुष्टि कर सकते हैं कि एक precompiled mod_wsgi.so माउंटेन शेर सर्वर के साथ भेज दिया गया है।

+0

यह '/ अनुप्रयोग/सर्वर.एप/सामग्री/सर्वर रूट/usr/libexec/apache2/mod_wsgi.so' – bloudraak

+0

पर स्थापित है, आप सही थे, 'mysite.wsgi' को 'wsgi.py'' का नाम बदलकर 'mod_wsgi'' नाम दिया गया। मैं अन्य समस्याओं में भाग गया जो 'mysite.wsgi' में 'sys.path.append' का उपयोग करके पथ जोड़कर हल किया गया था जैसा कि [इस उत्तर] में वर्णित है (http: // stackoverflow।com/प्रश्न/2587251/विन्यास-समस्याओं-साथ-Django और आधुनिक-WSGI)। धन्यवाद। – bloudraak

-1

दो बातें:

  1. आप WSGIScriptAlias ​​उपयोग करना चाहते हैं आप mod_wsgi apache मॉड्यूल की आवश्यकता निर्देश। मेरे पास ओएस एक्स सर्वर नहीं है लेकिन जहां तक ​​मैं देख सकता हूं कि मॉड्यूल पहाड़ शेर मानक पर/usr/libexec/apache2 फ़ोल्डर में मौजूद नहीं है। आपको इसे here से डाउनलोड करना होगा। पता नहीं है कि ओएस एक्स सर्वर में कमांड लाइन टूल्स शामिल हैं या नहीं। मुझे मानक संस्करण पर लाने के लिए एक्स कोड स्थापित करने की आवश्यकता है। ऐसा लगता है कि instruction on how to install it on macos x

  2. Homebrew पर एक नज़र डालें। यह मैक के लिए अतिरिक्त सॉफ्टवेयर जोड़ने का एक बहुत अच्छा तरीका है। एक मोड़ में आप नवीनतम पायथन, nginx और uwsgi स्थापित कर सकते हैं। Nginx और uwsgi django ऐप्स को तैनात करने का एक शानदार तरीका है। मुझे mod_wsgi से अधिक लचीला और कुशल लगता है (यह दूसरा बिंदु अत्यधिक व्यक्तिपरक है)।

गुड लक

+0

mod_wsgi पैकेज माउंटेन शेर मानक में नहीं हो सकता है, लेकिन रिलीज़ होने से पहले एक रिपोर्ट में कहा गया था कि यह माउंटेन शेर सर्वर में था। अभी तक जारी होने के बाद इसकी पुष्टि नहीं हुई है। –

+0

मॉड्यूल '/ अनुप्रयोग/सर्वर.एप/सामग्री/सर्वर रूट/usr/libexec/apache2/mod_wsgi.so' – bloudraak

+0

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

1

मैंने खुद को अपने मैक्सपोर्ट django को माउंटेन शेर सर्वर 10.8.2 में माइग्रेट करने के लिए संघर्ष किया, और किसी कारण से यहां दिए गए उत्तरों ने मुझे mod_wsgi.so मतभेदों को याद रखने में मदद की।

मैं/appplications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so को अपने /opt/local/apache2/modules/mod_wsgi.so के साथ ओवरराइट करता हूं।

मैं मैकपॉर्ट्स apache2 को पूरी तरह से हटाने की उम्मीद कर रहा था, लेकिन मुझे लगता है कि मैं इसे बेहतर रखता हूं। मैं अभी भी मैकपॉर्ट्स पायथन पसंद करता हूं, क्योंकि संख्यात्मक रूप से गहन पैकेजों के साथ अद्यतित रहना आसान है।

हां, यह भी सुनिश्चित करें कि आप wsgi.py को wsgi.pywsgi में बदल दें।

मैंने httpd_wsgi.conf को httpd_mywsgi.conf पर कॉपी किया; मैंने अपने django.wsgi को/लाइब्रेरी/सर्वर/वेब/डेटा/वेबएप में जोड़ा।
/लाइब्रेरी/सर्वर/वेब/कॉन्फ़िगर/apache2/webapps में, मैंने com.apple.webapp.wsgi.plist की प्रतिलिपि बनाई।

ऐसा लगता है कि आपने एक ही प्लिस्ट पैटर्न चुना है।

मैं अभी भी अपनी स्थिर सामग्री का काम कर रहा हूं, हालांकि, सोचा कि mod_wsgi.so खोज मैकपॉर्ट्स से माइग्रेट करने में किसी और की मदद कर सकती है।

+1

आपकी .so फ़ाइल ओएस अपडेट पर ओवरराइड हो जाएगी यदि वे mod_wsgi अपडेट करते हैं। आपको अपना संस्करण कहीं और रखना चाहिए और अपाचे कॉन्फ़िगरेशन में mod_wsgi के लिए LoadModule लाइन को बदलना चाहिए था। –

+0

अच्छा बिंदु @ ग्राहम डंपलटन, और जब भी आप लोड मॉड्यूल पर प्रतिलिपि पाते हैं तो यह एक लाल झंडा है। – zerocog

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