﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
1736	[magic-removal] [patch] Add FastCGI support to manage.py	jcrasta@…	Adrian Holovaty	"Deploying a FastCGI django application is rather complicated, especially for first-time users, as there is at least one extra script needed to be deployed along with the application, along with installing the ""flup"" python package usually.

The attached patch (made for magic-removal, but it shouldn't be too hard to add this to trunk either) adds a ""runfcgi"" subcommand to manage.py and django-admin.py.   Depending on your web-server configuration, running a fastCGI application might be as simple as: 
{{{ 
$ ./manage.py runfcgi 
}}}

For more complicated setups, there might be something like this:
{{{
$ ./manage.py runfcgi method=prefork socket=/tmp/django.sock pidfile=/var/run/django-fcgi.pid
}}}

Through the versatality of flup, the FastCGI code can run over the ""standard"" fastCGI file-descriptor, or it can run over a TCP socket, or a unix domain socket (only available on POSIX systems).

I've included a help screen, and running 'runfcgi help'  will print out the following:
{{{
runfcgi:
  Run this project as a fastcgi application. To do this, the
  flup package from http://www.saddi.com/software/flup/ is
  required.

Usage:
   django-admin.py runfcgi --setttings=yourproject.settings [fcgi settings]
   manage.py runfcgi [fcgi settings]

Optional Fcgi settings: (setting=value)
  host=HOSTNAME        hostname to listen on..
  port=PORTNUM         port to listen on.
  socket=FILE          UNIX socket to listen on.
  method=IMPL          prefork or threaded (default prefork)
  maxspare=NUMBER      max number of spare processes to keep running.
  minspare=NUMBER      min number of spare processes to prefork.
  maxchildren=NUMBER   hard limit number of processes in prefork mode.
  daemonize=BOOL       whether to detach from terminal.
  pidfile=FILE         write the spawned process-id to this file.
  workdir=DIRECTORY    change to this directory when daemonizing

Examples:
  Run a ""standard"" fastcgi process on a file-descriptor
  (for webservers which spawn your processes for you)
    $ manage.py runfcgi method=threaded

  Run a fastcgi server on a TCP host/port
    $ manage.py runfcgi method=prefork host=127.0.0.1 port=8025

  Run a fastcgi server on a UNIX domain socket (posix platforms only)
    $ manage.py runfcgi method=prefork socket=/tmp/fcgi.sock

  Run a fastCGI as a daemon and write the spawned PID in a file
    $ manage.py runfcgi socket=/tmp/fcgi.sock method=prefork \
        daemonize=true pidfile=/var/run/django-fcgi.pid
}}}

If any questions or clarifications are needed, one can reach me by my e-mail or as Crast on #django
- James Crasta"	enhancement	closed	Core (Management commands)	magic-removal	normal	fixed			Unreviewed	1	0	0	0	0	0
