When exploring the cosmos of python powered web frameworks it’s easy to get lost due to fast moving versions. Recently we had a lot of difficulty getting Flask connected via a WSGI script on Apache. This seems to be due to needing the object factory to be called specifically rather than relying on the module namespace to do the work for us, there doesn’t seem to be much help online about this yet. We’re also running python in a virtualenv so the working wsgi script looks like this:
#!/usr/bin/python import sys import logging import os logging.basicConfig(stream=sys.stderr) PROJECT_DIR = "/var/www/yourflasksite/" activate_this = os.path.join(PROJECT_DIR, 'bin', 'activate_this.py') execfile(activate_this, dict(__file__=activate_this)) sys.path.append(PROJECT_DIR) from app import create_app application=create_app(os.getenv('FLASK_CONFIG') or 'default') application.secret_key = 'your site's key'
For completeness, here is the apache config that starts it up:
<VirtualHost *:80> ServerName your.url WSGIScriptAlias / /var/www/yourflasksite/yoursite.wsgi <Directory /var/www/yourflasksite/app> Order allow,deny Allow from all </Directory> Alias /static /var/www/yourflasksite/app/static <Directory /var/www/yourflasksite/app/static/> Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/yourflasksite-error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/yourflasksite-access.log </VirtualHost>