import sys import os import logging from logging.handlers import RotatingFileHandler # This script assumes you have created a subdomain on DreamHost # that is configured for Passenger. It also assumes you have created # a Python virtual environment in the root of that subdomain and # installed psiTurk inside it. # Check whether the currently running python process is the same # as the python executable in your virtualenv. If not, exec that # process so that we use the correct version of python. base_path = "/path/to/your/subdomain/folder" INTERP = os.path.join(base_path, 'bin', 'python') if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) # Get the path to the experiment, and change to that directory # so that psiTurk can find out experiment files. os.chdir(os.path.join(base_path, 'experiment')) cwd = os.getcwd() sys.path.append(cwd) # Set up a few variables for our logger -- we'll log to the file # called 'passenger_wsgi.log' in the directory for our experiment, # and also use a somewhat more informative log format. logfilename = os.path.join(cwd, 'passenger_wsgi.log') logformat = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s" loglevel = logging.INFO # Create a rotating file handler for our passenger_wsgi.log, so # that we don't end up with crazy gigantic log files. handler = RotatingFileHandler( logfilename, maxBytes=1048576, backupCount=5) handler.setLevel(loglevel) handler.setFormatter(logging.Formatter(logformat)) # Configure the global logger with our defaults logging.basicConfig(filename=logfilename, format=logformat, level=loglevel) # Configure passenger's logger with our defaults logger = logging.getLogger("passenger_wsgi") logger.addHandler(handler) logger.setLevel(loglevel) # Start the Flask application logger.debug("Starting application") from psiturk.experiment import app # Configure the psiTurk and Werkzeug loggers as well app.logger.setLevel(loglevel) app.logger.addHandler(handler) werkzeug_logger = logging.getLogger('werkzeug') werkzeug_logger.setLevel(loglevel) werkzeug_logger.addHandler(handler) def application(environ, start_response): """Expose the application to passenger. This function gets called when passenger redirects requests to the Flask app.""" ip = environ.get('REMOTE_ADDR', '-') method = environ.get('REQUEST_METHOD', '-') uri = environ.get('REQUEST_URI', '-') referer = environ.get('HTTP_REFERER', '-') user_agent = environ.get('HTTP_USER_AGENT', '-') logger.debug('%s "%s %s" "%s" "%s"', ip, method, uri, referer, user_agent) try: result = app(environ, start_response) except Exception, e: logger.error("%s", str(e)) raise return result # Uncomment next two lines to enable debugging #from werkzeug.debug import DebuggedApplication #application = DebuggedApplication(application, evalex=True)