Last active
December 30, 2019 22:35
-
-
Save jhamrick/044c3607979eea2123ae to your computer and use it in GitHub Desktop.
Passenger configuration for psiTurk on DreamHost
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment