2012-04-02 15 views
9

Quiero ejecutar un CGI de Python en un entorno de alojamiento compartido. He seguido el ejemplo del frasco y se acercó con una pequeña aplicación de la siguiente manera:Enrutamiento de ruta en el Frasco

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() 

Mi .htaccess contiene:

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

Y mi index.cgi es

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

CGIHandler().run(app) 

Al trazar con éxito el camino / a index(), sin embargo, no asigna la ruta /pi a pi(), en lugar de convirtiendo un error 404. Supongo que echo de menos algo obvio. Gracias por la ayuda.

+0

¿Esto es con Apache? Creo que agregar una etiqueta Apache probablemente te dará más respuestas ya que esto parece ser más un problema de configuración del servidor web. – six8

+0

¿Su host solo es compatible con CGI o es compatible con mod_python o mod_wsgi? Esas son opciones mucho mejores. – six8

+0

Cixate, tienes razón, esto es con Apache. Soy nuevo en los frameworks web de python. La configuración de cgi parece más rápida que mod-wsgi para configurar. Es por eso que elijo cgi. Otra cosa, sospeché que puede necesitar url-rewrite. Pero debido a que no vi ninguna url-rewrite mencionada en el documento, entonces asumo que no hay necesidad. Gracias – sdc

Respuesta

2

Los comentarios sobre cgi vs. wsgi son válidos, pero si realmente quieres ir con la configuración de cgi, necesitas algunas reglas de reescritura para capturar URLs que no sean "/" con index.cgi. Con su configuración, básicamente dice que el archivo de índice es index.cgi, pero en caso de que exista algo más en la ruta index.cgi no se ejecutará. Es por eso que obtienes la solicitud 404 Not Found for/pi.

Puede acceder a la función pi() solicitando url /index.cgi/pi y le mostrará con éxito 3.1416, pero obviamente esa no es una URL muy buena. Sin embargo, esto da una pista sobre lo que debe configurarse para reescribir: reescriba todas las solicitudes con/a /index.cgi/. Esto proporciona reglas de reescritura muy simples junto con su configuración original:

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

No estoy seguro de si la solución anterior resolvió la consulta.

creo que el archivo .htaccess tiene que ser esta:

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

que funcionará perfectamente con esto. He probado con mi código.

Referencia - here

Cuestiones relacionadas