Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to solve import errors while trying to deploy Flask using WSGI on Apache2

I am having an issue deploying a flask app on apache2 using wsgi. I have posted the error logs and config files below. I have tried moving things around, renaming them, etc, but all give me an internal server error. Not sure why I'm getting the import error. Any input / suggestions are appreciated, thanks!

Here is my 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() 

Here is the basics of the directory tree, to give you an idea.

/flaskfirst/     /static/     /templates/     /views/     __init__.py     app.py     wsgi.py 

Here is the apache virtualhost file

<VirtualHost *:80>         ServerAdmin [email protected]         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> 
like image 797
Shane Reustle Avatar asked Sep 12 '10 21:09

Shane Reustle


2 Answers

Thanks to zarf and damjan on irc.freenode.org at #pocoo, they were able to help me get this fixed. The problem was the PythonPath was not correct. We fixed this by using the following wsgi.py

import sys sys.path.insert(0, "/sites/flaskfirst")  from app import app application = app 
like image 69
Shane Reustle Avatar answered Sep 23 '22 06:09

Shane Reustle


I used your solution to get it working but it kept duplicating the path in sys.path (you can write it out to see if it happens to you) so I made a little modification:

import sys flaskfirst = "/sites/flaskfirst" if not flaskfirst in sys.path:     sys.path.insert(0, flaskfirst)  from app import app application = app 

That way it's only included once

like image 27
Willyfrog Avatar answered Sep 19 '22 06:09

Willyfrog