2011-09-06 10 views
8

के साथ एक फ्लास्क एप्लिकेशन को तैनात करना मैंने फ्लास्क ढांचे का उपयोग करके एक छोटा सा एप्लीकेशन लिखा है। मैं इसे सीजीआई का उपयोग करके होस्ट करने की कोशिश करता हूं। दस्तावेज़ीकरण का अनुसरण मैं निम्नलिखित सामग्री के साथ एक .cgi फ़ाइल बनाई:सीजीआई

...

File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1075, in bind_to_environ wsgi_server_name = environ.get('HTTP_HOST', environ['SERVER_NAME'])
KeyError: 'SERVER_NAME'
Status: 500 Internal Server Error
Content-Type: text/plain
Content-Length: 59

अपने आवेदन में मैं निर्धारित किया है:

#!/usr/bin/python 
from wsgiref.handlers import CGIHandler 
from yourapplication import app 

CGIHandler().run(app) 

निम्न त्रुटि में फ़ाइल परिणाम चल रहा है:

app.config['SERVER_NAME'] = 'localhost:5000' 

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

+1

क्या आप इसे कुछ http सर्वर के अंतर्गत चलाते हैं? उन पर्यावरण युद्धों को सीजीआई निष्पादित करने वाले http सर्वर द्वारा सेट किया जाना चाहिए। – mkriheli

+0

टिप्पणी के लिए धन्यवाद। मैं होस्टिंग के लिए अपाचे चला रहा हूं। मुझे नहीं लगता था कि मुझे स्थानीय स्तर पर आदेश चलाने के लिए सर्वर को कॉन्फ़िगर करने की आवश्यकता है। कॉन्फ़िगरेशन की आवश्यकता होने के बाद मैं फिर कोशिश करूंगा। – monostop

+0

क्या आप इस त्रुटि को ठीक करने में सक्षम थे? – Shadkhan

उत्तर

0

पूर्णता के लिए उपरोक्त टिप्पणियों के बाद इसे उत्तर के रूप में पोस्ट किया गया है।

ऊपर चर्चा के अनुसार, कुछ सर्वर द्वारा सीजीआई स्क्रिप्ट निष्पादित की जानी चाहिए। यहाँ सार from CGI 1.1 RFC है:

The Common Gateway Interface (CGI) is a simple interface for running external programs, software or gateways under an information server in a platform-independent manner. Currently, the supported information servers are HTTP servers.

वातावरण चर (जो लापता थे और त्रुटि शुरू हो) के लिए sectuib 4.1 आरएफसी में देखते हैं।

2

यह प्रश्न तीन वर्ष का है, और इसे उत्तर के रूप में कभी फ़्लैग नहीं किया गया था। यदि आप इसे करने के बारे में एक पूरी तरह से पूर्ण चर्चा की तलाश में हैं, तो यह मेरे द्वारा हालिया पोस्ट, this related stackoverflow question पर देखें। यह आपके लिए काम करना चाहिए।

निश्चित रूप से mkriheli का सही विचार है; monostop cgi फ़ाइल चलाने की कोशिश नहीं करनी चाहिए (सर्वर आने वाले HTTP अनुरोध के जवाब में ऐसा करने दें)।

+0

वास्तव में, http://stackoverflow.com/a/24848407/2371522 मेरे लिए काम किया। – One

0

मैं दिखाने के लिए मैं क्या किया है और यह Godaddy में काम कर रहा है मेजबान खाते को साझा करने की कोशिश करेंगे:

#!/home/USERNAME/.local/bin/python3 
from wsgiref.handlers import CGIHandler 

from sys import path 
path.insert(0, '/home/USERNAME/public_html/MYSITE/') 
from __init__ import app 

class ProxyFix(object): 
    def __init__(self, app): 
     self.app = app 

    def __call__(self, environ, start_response): 
     environ['SERVER_NAME'] = "" 
     environ['SERVER_PORT'] = "80" 
     environ['REQUEST_METHOD'] = "GET" 
     environ['SCRIPT_NAME'] = "" 
     environ['PATH_INFO'] = "/" 
     environ['QUERY_STRING'] = "" 
     environ['SERVER_PROTOCOL'] = "HTTP/1.1" 
     return self.app(environ, start_response) 

if __name__ == '__main__': 
    app.wsgi_app = ProxyFix(app.wsgi_app) 
    CGIHandler().run(app) 
:

mysite फ़ोल्डर में cgi-bin फ़ोल्डर में, मैं निम्नलिखित cgi फ़ाइल जोड़ी

जैसा कि आप init फ़ाइल को MYSITE फ़ोल्डर में देख सकते हैं फ्लास्क ऐप है।

सबसे महत्वपूर्ण बात यह है कि अनुमतियां सही सेट करें। मैंने इस फ़ोल्डर की अनुमति के लिए 755 "/home/USERNAME/.local/bin/python3" फ़ोल्डर के रूप में सेट किया है !! याद रखें कि फ्लास्क खोलने के लिए सिस्टम को इस अनुमति की आवश्यकता है। जब कोई आपके पेज में प्रवेश करती है

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /home/USERNAME/public_html/MYSITE/cgi-bin/application.cgi/$1 [L] 

तो यह cgi फ़ाइल प्रस्तुत करना होगा:

cgi मैं mysite फ़ोल्डर में निम्नलिखित .htaccess फाइल को खोलने के लिए है।

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