summaryrefslogtreecommitdiff
path: root/parts/django/django/core/servers/fastcgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'parts/django/django/core/servers/fastcgi.py')
-rw-r--r--parts/django/django/core/servers/fastcgi.py183
1 files changed, 0 insertions, 183 deletions
diff --git a/parts/django/django/core/servers/fastcgi.py b/parts/django/django/core/servers/fastcgi.py
deleted file mode 100644
index 7e724c2..0000000
--- a/parts/django/django/core/servers/fastcgi.py
+++ /dev/null
@@ -1,183 +0,0 @@
-"""
-FastCGI (or SCGI, or AJP1.3 ...) server that implements the WSGI protocol.
-
-Uses the flup python package: http://www.saddi.com/software/flup/
-
-This is a adaptation of the flup package to add FastCGI server support
-to run Django apps from Web servers that support the FastCGI protocol.
-This module can be run standalone or from the django-admin / manage.py
-scripts using the "runfcgi" directive.
-
-Run with the extra option "help" for a list of additional options you can
-pass to this server.
-"""
-
-from django.utils import importlib
-import sys, os
-
-__version__ = "0.1"
-__all__ = ["runfastcgi"]
-
-FASTCGI_HELP = r"""
- Run this project as a fastcgi (or some other protocol supported
- by flup) application. To do this, the flup package from
- http://www.saddi.com/software/flup/ is required.
-
- runfcgi [options] [fcgi settings]
-
-Optional Fcgi settings: (setting=value)
- protocol=PROTOCOL fcgi, scgi, ajp, ... (default fcgi)
- 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).
- maxrequests=NUMBER number of requests a child handles before it is
- killed and a new child is forked (0 = no limit).
- maxspare=NUMBER max number of spare processes / threads.
- minspare=NUMBER min number of spare processes / threads.
- maxchildren=NUMBER hard limit number of processes / threads.
- 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.
- debug=BOOL set to true to enable flup tracebacks.
- outlog=FILE write stdout to this file.
- errlog=FILE write stderr to this file.
- umask=UMASK umask to use when daemonizing, in octal notation (default 022).
-
-Examples:
- Run a "standard" fastcgi process on a file-descriptor
- (for Web servers which spawn your processes for you)
- $ manage.py runfcgi method=threaded
-
- Run a scgi server on a TCP host/port
- $ manage.py runfcgi protocol=scgi 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
-
-"""
-
-FASTCGI_OPTIONS = {
- 'protocol': 'fcgi',
- 'host': None,
- 'port': None,
- 'socket': None,
- 'method': 'fork',
- 'daemonize': None,
- 'workdir': '/',
- 'pidfile': None,
- 'maxspare': 5,
- 'minspare': 2,
- 'maxchildren': 50,
- 'maxrequests': 0,
- 'debug': None,
- 'outlog': None,
- 'errlog': None,
- 'umask': None,
-}
-
-def fastcgi_help(message=None):
- print FASTCGI_HELP
- if message:
- print message
- return False
-
-def runfastcgi(argset=[], **kwargs):
- options = FASTCGI_OPTIONS.copy()
- options.update(kwargs)
- for x in argset:
- if "=" in x:
- k, v = x.split('=', 1)
- else:
- k, v = x, True
- options[k.lower()] = v
-
- if "help" in options:
- return fastcgi_help()
-
- try:
- import flup
- except ImportError, e:
- print >> sys.stderr, "ERROR: %s" % e
- print >> sys.stderr, " Unable to load the flup package. In order to run django"
- print >> sys.stderr, " as a FastCGI application, you will need to get flup from"
- print >> sys.stderr, " http://www.saddi.com/software/flup/ If you've already"
- print >> sys.stderr, " installed flup, then make sure you have it in your PYTHONPATH."
- return False
-
- flup_module = 'server.' + options['protocol']
-
- if options['method'] in ('prefork', 'fork'):
- wsgi_opts = {
- 'maxSpare': int(options["maxspare"]),
- 'minSpare': int(options["minspare"]),
- 'maxChildren': int(options["maxchildren"]),
- 'maxRequests': int(options["maxrequests"]),
- }
- flup_module += '_fork'
- elif options['method'] in ('thread', 'threaded'):
- wsgi_opts = {
- 'maxSpare': int(options["maxspare"]),
- 'minSpare': int(options["minspare"]),
- 'maxThreads': int(options["maxchildren"]),
- }
- else:
- return fastcgi_help("ERROR: Implementation must be one of prefork or thread.")
-
- wsgi_opts['debug'] = options['debug'] is not None
-
- try:
- module = importlib.import_module('.%s' % flup_module, 'flup')
- WSGIServer = module.WSGIServer
- except:
- print "Can't import flup." + flup_module
- return False
-
- # Prep up and go
- from django.core.handlers.wsgi import WSGIHandler
-
- if options["host"] and options["port"] and not options["socket"]:
- wsgi_opts['bindAddress'] = (options["host"], int(options["port"]))
- elif options["socket"] and not options["host"] and not options["port"]:
- wsgi_opts['bindAddress'] = options["socket"]
- elif not options["socket"] and not options["host"] and not options["port"]:
- wsgi_opts['bindAddress'] = None
- else:
- return fastcgi_help("Invalid combination of host, port, socket.")
-
- if options["daemonize"] is None:
- # Default to daemonizing if we're running on a socket/named pipe.
- daemonize = (wsgi_opts['bindAddress'] is not None)
- else:
- if options["daemonize"].lower() in ('true', 'yes', 't'):
- daemonize = True
- elif options["daemonize"].lower() in ('false', 'no', 'f'):
- daemonize = False
- else:
- return fastcgi_help("ERROR: Invalid option for daemonize parameter.")
-
- daemon_kwargs = {}
- if options['outlog']:
- daemon_kwargs['out_log'] = options['outlog']
- if options['errlog']:
- daemon_kwargs['err_log'] = options['errlog']
- if options['umask']:
- daemon_kwargs['umask'] = int(options['umask'], 8)
-
- if daemonize:
- from django.utils.daemonize import become_daemon
- become_daemon(our_home_dir=options["workdir"], **daemon_kwargs)
-
- if options["pidfile"]:
- fp = open(options["pidfile"], "w")
- fp.write("%d\n" % os.getpid())
- fp.close()
-
- WSGIServer(WSGIHandler(), **wsgi_opts).run()
-
-if __name__ == '__main__':
- runfastcgi(sys.argv[1:])