diff --git a/gunicorn/app/base.py b/gunicorn/app/base.py index 79acb0dc1a..2caa9e09d5 100644 --- a/gunicorn/app/base.py +++ b/gunicorn/app/base.py @@ -75,8 +75,18 @@ def run(self): sys.stderr.flush() sys.exit(1) + class Application(BaseApplication): + def chdir(self): + # chdir to the configured path before loading, + # default is the current dir + os.chdir(self.cfg.chdir) + + # add the path to sys.path + if self.cfg.chdir not in sys.path: + sys.path.insert(0, self.cfg.chdir) + def get_config_from_filename(self, filename): if not os.path.exists(filename): @@ -142,6 +152,9 @@ def load_config(self): # optional settings from apps cfg = self.init(parser, args, args.args) + # set up import paths and follow symlinks + self.chdir() + # Load up the any app specific configuration if cfg: for k, v in cfg.items(): @@ -174,6 +187,10 @@ def load_config(self): continue self.cfg.set(k.lower(), v) + # current directory might be changed by the config now + # set up import paths and follow symlinks + self.chdir() + def run(self): if self.cfg.check_config: try: diff --git a/gunicorn/app/pasterapp.py b/gunicorn/app/pasterapp.py index a6150225b4..33f62b0b25 100644 --- a/gunicorn/app/pasterapp.py +++ b/gunicorn/app/pasterapp.py @@ -163,10 +163,6 @@ def __init__(self, app, gcfg=None, host="127.0.0.1", port=None, *args, **kwargs) self.load_config_from_file(default_config) def load(self): - # chdir to the configured path before loading, - # default is the current dir - os.chdir(self.cfg.chdir) - return self.app diff --git a/gunicorn/app/wsgiapp.py b/gunicorn/app/wsgiapp.py index 190086e37c..2205944cd9 100644 --- a/gunicorn/app/wsgiapp.py +++ b/gunicorn/app/wsgiapp.py @@ -4,7 +4,6 @@ # See the NOTICE for more information. import os -import sys from gunicorn.errors import ConfigError from gunicorn.app.base import Application @@ -37,23 +36,11 @@ def init(self, parser, opts, args): self.cfg.set("default_proc_name", args[0]) self.app_uri = args[0] - def chdir(self): - # chdir to the configured path before loading, - # default is the current dir - os.chdir(self.cfg.chdir) - - # add the path to sys.path - sys.path.insert(0, self.cfg.chdir) - def load_wsgiapp(self): - self.chdir() - # load the app return util.import_app(self.app_uri) def load_pasteapp(self): - self.chdir() - # load the paste app from .pasterapp import load_pasteapp return load_pasteapp(self.cfgurl, self.relpath, global_conf=self.cfg.paste_global_conf)