Webfaction is a Python friendly hosting with affordable pricing and tons of useful features.
To deploy a Flask application on Webfaction you should follow these steps:
webapps/yourapplication/ |-- apache2 | |-- bin | |-- conf | |-- lib | |-- logs | `-- modules `-- htdocs
foo@bar:~$ easy_install-2.6 Flask
Note that Webfaction gives you different easy_install executables: use the one that meets the Python version you choose when the application was created.
webapps/yourapp/index.pydelete the content and add the following line:
from yourapp import app as application
webapps/yourapp/apache2/conf/httpd.conf. At the bottom of the file add the following lines changing
yourusernameaccording to your setup:
WSGIPythonPath /home/yourusername/webapps/yourapp/htdocs/ #If you do not specify the following directive the app *will* work but you will #see index.py in the path of all URLs WSGIScriptAlias / /home/yourusername/webapps/yourapp/htdocs/index.py <Directory /home/yourusername/webapps/yourapp/htdocs/> AddHandler wsgi-script .py RewriteEngine on RewriteBase / WSGIScriptReloading On </Directory>
If you have choosed
/ as the mout point for your application you are done.
If you mounted the application somewhere else (i.e. /blog) there is some additional work to do.
You need to write a WSGI middleware that prefixes SCRIPT_NAME with that prefix otherwise the
url_for function will not be able to create the correct URLs for you (the following snippets is kindly provided by Armin himself).
class WebFactionMiddleware(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['SCRIPT_NAME'] = '/yourapp' return self.app(environ, start_response) app.wsgi_app = WebFactionMiddleware(app.wsgi_app)
You can put this snippet in the application's
This snippet by esaurito can be used freely for anything you like. Consider it public domain.