2012-04-02 16 views
9

में पथ रूटिंग मैं साझा होस्टिंग वातावरण पर एक पायथन सीजीआई चलाने के लिए चाहता हूं। मैं बोतल के उदाहरण का पालन किया और नीचे के रूप में एक छोटे से आवेदन के साथ आया था:फ्लास्क

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

@app.route("/pi") 
def pi(): 
    return "3.1416" 

if __name__ == "__main__": 
    app.run() 

मेरे .htaccess शामिल हैं:

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

और मेरे index.cgi

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

CGIHandler().run(app) 

यह सफलतापूर्वक करने के लिए पथ / नक्शे है index(), हालांकि यह /pi से pi() पथ को मैप करने में विफल रहता है, इसके बजाय 404 त्रुटि बदलना मुझे लगता है मुझे कुछ स्पष्ट याद आती है। सहायता के लिए धन्यवाद।

+0

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

+0

क्या आपका होस्ट केवल CGI का समर्थन करता है या क्या वे mod_python या mod_wsgi का समर्थन करते हैं? वे बहुत बेहतर विकल्प हैं। – six8

+0

सिक्सीट, आप सही हैं यह अपाचे के साथ है। मैं पाइथन वेब-फ्रेमवर्क के लिए नया हूं। सीजीआई सेटिंग सेटअप करने के लिए mod-wsgi से तेज लगती है। यही कारण है कि मैं सीजीआई चुनता हूं। एक और बात, मुझे संदेह है कि इसे यूआरएल-रीराइट की आवश्यकता हो सकती है। लेकिन क्योंकि मुझे दस्तावेज़ में उल्लिखित यूआरएल-रीराइट नहीं देखा गया था, इसलिए मुझे लगता है कि इसकी कोई ज़रूरत नहीं है। धन्यवाद – sdc

उत्तर

2

सीजीआई बनाम wsgi के बारे में टिप्पणियां मान्य हैं, लेकिन यदि आप वास्तव में सीजीआई सेटअप के साथ जाना चाहते हैं, तो आपको index.cgi के साथ "/" के अलावा URL को पकड़ने के लिए कुछ पुनर्लेखन नियमों की आवश्यकता है। आपके सेटअप के साथ आप मूल रूप से कहते हैं कि इंडेक्स फ़ाइल index.cgi है, लेकिन अगर पथ index.cgi में कुछ और निष्पादित नहीं किया गया है। यही कारण है कि आपको /4 अनुरोध के लिए 404 नहीं मिला है।

आप url /index.cgi/pi का अनुरोध करके pi() फ़ंक्शन तक पहुंच सकते हैं और यह आपको सफलतापूर्वक 3.1416 प्रस्तुत करेगा, लेकिन जाहिर है कि यह एक बहुत अच्छा यूआरएल नहीं है। यह पुनर्विचार के लिए कॉन्फ़िगर करने की आवश्यकता के बारे में एक संकेत देता है हालांकि: सभी अनुरोधों को/to /index.cgi/ के साथ दोबारा लिखें। यह आपके मूल कॉन्फ़िगरेशन के साथ नियमों को बहुत सरल पुनर्लेखन देता है:

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

RewriteEngine On 
RewriteRule ^index.cgi/(.*)$ - [S=1] 
RewriteRule ^(.*)$ index.cgi/$1 [QSA,L] 
0

सुनिश्चित नहीं है कि उपर्युक्त समाधान क्वेरी को हल करता है या नहीं।

मुझे लगता है कि .htaccess फ़ाइल इस की जरूरत है:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /path/to/the/application.cgi/$1 [L] 

यह इस के साथ पूरी तरह से काम करेगा। मैंने अपने कोड के साथ परीक्षण किया है।

संदर्भ - here