@@ -0,0 +1,2338 @@
+import subprocess%0Aimport argparse%0Aimport pwd%0Aimport os%0A%0A%0Adef _get_user_home_dir(user):%0A    return os.path.expanduser('~' + user)%0A%0A%0Adef build_parser():%0A%0A    def _get_current_user():%0A        return pwd.getpwuid(os.getuid())%5B0%5D%0A%0A    DEFAULTS = %7B%0A        'workers': 3,%0A        'user': _get_current_user(),%0A        'group': _get_current_user(),%0A        'log_file': os.path.join(%0A            _get_user_home_dir(_get_current_user()),%0A            'gunicorn',%0A            'tca.log'),%0A        'virtualenv': 'tca-dev',%0A    %7D%0A%0A%0A    parser = argparse.ArgumentParser()%0A%0A    parser.add_argument('-w', '--workers', type=int,%0A                        default=DEFAULTS%5B'workers'%5D)%0A    parser.add_argument('--user', type=str,%0A                        default=DEFAULTS%5B'user'%5D)%0A    parser.add_argument('--group', type=str,%0A                        default=DEFAULTS%5B'group'%5D)%0A    parser.add_argument('--log-file', type=str,%0A                        default=DEFAULTS%5B'log_file'%5D)%0A    parser.add_argument('--virtualenv', type=str,%0A                        default=DEFAULTS%5B'virtualenv'%5D)%0A    parser.add_argument('--socket-name', type=str, required=True)%0A%0A    return parser%0A%0A%0Adef start_server(args):%0A    # Create the log directory, if necessary%0A    log_dir = os.path.dirname(args.log_file)%0A    if not os.path.exists(log_dir):%0A        os.makedirs(log_dir)%0A%0A    # Build the bind address%0A    # Make it a local UNIX socket instead of loopback TCP port%0A    bind_address = 'unix:/tmp/%7Bsocket_name%7D.socket'.format(%0A        socket_name=args.socket_name)%0A%0A    # Activate the virtualenv%0A    activate_this_file = os.path.join(%0A        _get_user_home_dir(args.user),%0A        '.virtualenvs',%0A        args.virtualenv,%0A        'bin',%0A        'activate_this.py'%0A    )%0A    execfile(activate_this_file, dict(__file__=activate_this_file))%0A%0A    # Start gunicorn processes -- spawns them and exits%0A    # NOTE: This makes the script dependent on the cwd.%0A    # TODO: Make it independent of the cwd.%0A    os.chdir('../tca')%0A    subprocess.call(%5B%0A        'gunicorn',%0A        'tca.wsgi:application',%0A        '-b', bind_address,%0A        '-w', str(args.workers),%0A        '--user', args.user,%0A        '--group', args.group,%0A        '--log-file', args.log_file,%0A        '--log-level', 'debug',%0A    %5D)%0A%0A%0Aif __name__ == '__main__':%0A    parser = build_parser()%0A    start_server(parser.parse_args())%0A%0A

Add a convenience script for running gunicorn workers