Comment résoudre les erreurs d'importation tout en essayant de déployer en utilisant Flask WSGI sur Apache2
Question
J'ai un problème de déployer une application sur apache2 flacon en utilisant wsgi. J'ai posté les journaux d'erreurs et les fichiers de configuration ci-dessous. Je l'ai essayé de déplacer les choses, les renommer, etc, mais tout me donner une erreur de serveur interne. Je ne sais pas pourquoi je reçois l'erreur d'importation. Toute entrée / suggestions sont appréciés, merci!
Voici mon 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()
Voici les bases de l'arborescence, pour vous donner une idée.
/flaskfirst/
/static/
/templates/
/views/
__init__.py
app.py
wsgi.py
Voici le fichier apache VirtualHost
<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>
La solution
Merci à zarf
et damjan
sur irc.freenode.org à #pocoo, ils ont pu me aider à obtenir que ce soit réglé. Le problème était le PythonPath était pas correct. Nous avons fixé cela en utilisant le wsgi.py suivant
import sys
sys.path.insert(0, "/sites/flaskfirst")
from app import app
application = app
Autres conseils
J'ai utilisé votre solution pour le faire fonctionner, mais il a continué de dupliquer le chemin dans sys.path (vous pouvez l'écrire pour voir si cela vous arrive) donc je fait une petite modification:
import sys
flaskfirst = "/sites/flaskfirst"
if not flaskfirst in sys.path:
sys.path.insert(0, flaskfirst)
from app import app
application = app
De cette façon, il est inclus qu'une seule fois