Python applications can be launched using Passenger offering improved throughput and lifecycle management. Launching CGI scripts wrapped by
pyenv will yield very poor throughput as a result of multiple shell subprocesses necessary to ascertain the correct Python interpreter. Adapting a CGI application to WSGI improves throughput significantly by reducing overhead through a persistent process. Pages load quickly, and applications utilize resources efficiently.
Note: This KB requires a v6+ hosting platform.
Simple WSGI script
Prerequisite: First, follow the guide in Using multiple versions with Passenger to create a suitable directory structure.
Create a Passenger-compatible WSGI script named
passenger_wsgi.py beneath the
public/ folder. A single function, similar to main() in a C application, named
application() is the entry-point for Passenger. Without this function and named file, Passenger cannot load your application. The below example is compatible with Python 3:
# Python 3-compatible version import sys ctr=0 def application(environ, start_response): global ctr start_response('200 OK', [('Content-Type', 'text/plain')]) v = sys.version_info ctr+=1 str = 'hello world from %d.%d.%d!n' % (v.major, v.minor, v.micro) return [bytes(str, 'UTF-8')]
Your directory structure should now look like:
. ├── passenger_wsgi.py ├── public/ ├── .python-version └── tmp/
.python-version is a file created by defining a Python version for the directory, e.g.
pyenv local 3.3.5. Connect the
public/ folder to a subdomain within the control panel under Web > Subdomains.
Application didn’t launch?
Check the Passenger launcher error log under
/var/log/httpd/passenger.log. This is a combined logfile, so always remember to publish coherent, and flawless code!