¿Cómo resolver errores de importación al tratar de implementar frasco utilizando WSGI en Apache 2
Pregunta
Estoy teniendo un problema el despliegue de una aplicación frasco de apache2 usando wsgi. He publicado los registros de errores y archivos de configuración de abajo. He intentado mover las cosas, cambiar el nombre de ellos, etc, sino que todos me dará un error interno del servidor. No estoy seguro de por qué estoy recibiendo el error de importación. Cualquier entrada / sugerencias son apreciados, gracias!
Aquí está mi apache error.log
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Target WSGI script '/sites/flaskfirst/wsgi.py' cannot be loaded as Python module.
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Exception occurred processing WSGI script '/sites/flaskfirst/wsgi.py'.
[Sun Sep 12 20:47:59 2010] [error] [client] Traceback (most recent call last):
[Sun Sep 12 20:47:59 2010] [error] [client] File "/sites/flaskfirst/wsgi.py", line 1, in <module>
[Sun Sep 12 20:47:59 2010] [error] [client] from app import app as application
[Sun Sep 12 20:47:59 2010] [error] [client] ImportError: No module named app
wsgi.py
# This is wsgi.py
from app import app as application
app.py
# This is app.py
from flask import Flask, render_template
import settings
app = Flask(__name__)
app.debug = settings.DEBUG
from views.homepage import *
from views.events import *
from views.submit import *
from views.feed import *
if __name__ == "__main__":
app.run()
Aquí está lo básico de la estructura de directorios, para darle una idea.
/flaskfirst/
/static/
/templates/
/views/
__init__.py
app.py
wsgi.py
Aquí está el archivo host virtual Apache
<VirtualHost *:80>
ServerAdmin sreustle@gmail.com
ServerName crath.org
DocumentRoot /sites/flaskfirst
# WSGI Settings
WSGIScriptAlias / /sites/flaskfirst/wsgi.py
WSGIDaemonProcess flaskfirst user=sreustle group=general processes=1 threads=10
WSGIProcessGroup flaskfirst
# Static Directories
Alias /static /sites/flaskfirst/static/
<Location "/static">
SetHandler None
</Location>
</VirtualHost>
Solución
Gracias a zarf
y damjan
en irc.freenode.org en #pocoo, ellos fueron capaces de ayudar a conseguir que esto esté arreglado. El problema era el PYTHONPATH no era correcta. Hemos fijado esto usando la siguiente wsgi.py
import sys
sys.path.insert(0, "/sites/flaskfirst")
from app import app
application = app
Otros consejos
He utilizado su solución para que funcione pero mantenía la duplicación de la ruta en sys.path (se puede escribir hacia fuera para ver si le pasa a usted) así que hice una pequeña modificación:
import sys
flaskfirst = "/sites/flaskfirst"
if not flaskfirst in sys.path:
sys.path.insert(0, flaskfirst)
from app import app
application = app
De esta manera se incluyó solamente una vez