2009-07-03 12 views
6

मैंने एक वेब.py अनुप्रयोग बनाया है, और अब यह तैनात करने के लिए तैयार है, मैं web.py के अंतर्निर्मित वेबसर्वर पर नहीं चलना चाहता हूं। मैं अपने आवेदन कोड को बदलने के बिना, विभिन्न वेबसर्वर, अपाचे या आईआईएस पर इसे चलाने में सक्षम होना चाहता हूं। यह वह जगह है जहां डब्लूएसजीआई आना चाहिए, अगर मैं इसे सही ढंग से समझता हूं।
हालांकि, मुझे समझ में नहीं आता कि मुझे डब्ल्यूएसजीआई सर्वर पर अपना आवेदन तैनाती करने के लिए क्या करना है? अधिकांश उदाहरण मानते हैं कि आप पिलोन/डीजेगो/अन्य-फ्रेमवर्क का उपयोग कर रहे हैं, जिस पर आप बस कुछ जादू कमांड चलाते हैं जो आपके लिए सबकुछ ठीक करता है।
web.application(...).run() चलाने के बजाय, मुझे (काफी संक्षिप्त) web.py दस्तावेज़ों के बारे में क्या समझता है, मुझे web.application(...).wsgifunc() का उपयोग करना चाहिए। और फिर क्या?WSGI के साथ एक वेब.py अनुप्रयोग को तैनात करना, कई सर्वर

उत्तर

6

सटीक रूप से आपको एक विशिष्ट WSGI होस्टिंग तंत्र के साथ होस्ट करने के लिए क्या करना है सर्वर के साथ बदलता है।

अपाचे/mod_wsgi और फ़्यूज़न पैसेंजर के मामले में, आपको बस एक डब्लूएसजीआई स्क्रिप्ट फ़ाइल प्रदान करने की आवश्यकता है जिसमें 'एप्लिकेशन' नामक ऑब्जेक्ट शामिल है। Web.py 0.2 के लिए, यह उचित तर्क के साथ web.wsgifunc() को कॉल करने का परिणाम है। Web.py 0.3 के लिए, आप web.application() द्वारा लौटाए गए ऑब्जेक्ट के wsgifunc() सदस्य फ़ंक्शन का उपयोग करते हैं। इन के विवरण mod_wsgi दस्तावेज़ देखें के लिए:

http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy

आप FastCGI उपयोग करने के लिए हो रही है के बजाय, इस तरह के Lighttpd, nginx या चेरोकी के रूप में एक सर्वर के लिए SCGI या AJP एडेप्टर, तो आप 'flup' पैकेज का उपयोग करने की आवश्यकता है उन भाषा अज्ञेय इंटरफेस और डब्लूएसजीआई के बीच एक पुल प्रदान करने के लिए। इसमें एक ही डब्लूएसजीआई एप्लीकेशन ऑब्जेक्ट के साथ फ्लूप फ़ंक्शन को कॉल करना शामिल है, जो कि mod_wsgi या फ़्यूज़न पैसेंजर जैसे कुछ पुल की आवश्यकता के बिना सीधे उपयोग करेगा। यह देखने की जानकारी के लिए:

http://trac.saddi.com/flup/wiki/FlupServers

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

+0

ठीक है, इसलिए कोई सामान्य तरीके से यह करने के लिए है। अफ़सोस की बात है। मुझे बस एडाप्टर का एक गुच्छा लिखना होगा। वैसे भी धन्यवाद! – carlpett

0

21 जुलाई 2009 के रूप में, कि flup, FastCGI, अपाचे और अधिक चर्चा करता the webpy install site पर एक बहुत संपूर्ण अधिष्ठापन गाइड, है। मेरे पास अभी तक ने को आजमाया नहीं है, लेकिन ऐसा लगता है कि यह अधिक विस्तृत है।

0

यहाँ दो होस्ट किए गए एप्लिकेशन cherrypy WSGI सर्वर का उपयोग करने का एक उदाहरण है:

 

#!/usr/bin/python 
from web import wsgiserver 
import web 

# webpy wsgi app 
urls = (
    '/test.*', 'index' 
) 

class index: 
    def GET(self): 
     web.header("content-type", "text/html") 
     return "Hello, world1!" 

application = web.application(urls, globals(), autoreload=False).wsgifunc() 


# generic wsgi app 
def my_blog_app(environ, start_response): 
    status = '200 OK' 
    response_headers = [('Content-type','text/plain')] 
    start_response(status, response_headers) 
    return ['Hello world! - blog\n'] 


""" 
# single hosted app 
server = wsgiserver.CherryPyWSGIServer(
      ('0.0.0.0', 8070), application, 
      server_name='www.cherrypy.example') 

""" 

# multiple hosted apps with WSGIPathInfoDispatcher 
d = wsgiserver.WSGIPathInfoDispatcher({'/test': application, '/blog': my_blog_app}) 
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8070), d)    
server.start() 
संबंधित मुद्दे