diff --git a/THANKS b/THANKS index db1a28f2..16ad99e1 100644 --- a/THANKS +++ b/THANKS @@ -170,3 +170,4 @@ Ryan Peck Alex Conrad Nik Nyby Ed Morley +Oliver Bristow diff --git a/gunicorn/app/base.py b/gunicorn/app/base.py index 263ed8e3..79acb0dc 100644 --- a/gunicorn/app/base.py +++ b/gunicorn/app/base.py @@ -147,26 +147,26 @@ class Application(BaseApplication): for k, v in cfg.items(): self.cfg.set(k.lower(), v) + env_args = parser.parse_args(self.cfg.get_cmd_args_from_env()) + if args.config: self.load_config_from_file(args.config) + elif env_args.config: + self.load_config_from_file(env_args.config) else: default_config = get_default_config_file() if default_config is not None: self.load_config_from_file(default_config) # Load up environment configuration - env_vars = self.cfg.get_cmd_args_from_env() - if env_vars: - env_args = parser.parse_args(env_vars) - for k, v in vars(env_args).items(): - if v is None: - continue - if k == "args": - continue - self.cfg.set(k.lower(), v) + for k, v in vars(env_args).items(): + if v is None: + continue + if k == "args": + continue + self.cfg.set(k.lower(), v) - # Lastly, update the configuration with any command line - # settings. + # Lastly, update the configuration with any command line settings. for k, v in vars(args).items(): if v is None: continue diff --git a/tests/config/test_cfg_alt.py b/tests/config/test_cfg_alt.py new file mode 100644 index 00000000..a0a15dd8 --- /dev/null +++ b/tests/config/test_cfg_alt.py @@ -0,0 +1 @@ +proc_name = "not-fooey" diff --git a/tests/test_config.py b/tests/test_config.py index 8f1af79d..28d470fa 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -18,8 +18,12 @@ from gunicorn.instrument import statsd dirname = os.path.dirname(__file__) def cfg_module(): return 'config.test_cfg' +def alt_cfg_module(): + return 'config.test_cfg_alt' def cfg_file(): return os.path.join(dirname, "config", "test_cfg.py") +def alt_cfg_file(): + return os.path.join(dirname, "config", "test_cfg_alt.py") def paster_ini(): return os.path.join(dirname, "..", "examples", "frameworks", "pylonstest", "nose.ini") @@ -329,6 +333,16 @@ def test_load_enviroment_variables_config(monkeypatch): app = NoConfigApp() assert app.cfg.workers == 4 +def test_config_file_environment_variable(monkeypatch): + monkeypatch.setenv("GUNICORN_CMD_ARGS", "--config=" + alt_cfg_file()) + with AltArgs(): + app = NoConfigApp() + assert app.cfg.proc_name == "not-fooey" + assert app.cfg.config == alt_cfg_file() + with AltArgs(["prog_name", "--config", cfg_file()]): + app = NoConfigApp() + assert app.cfg.proc_name == "fooey" + assert app.cfg.config == cfg_file() def test_invalid_enviroment_variables_config(monkeypatch, capsys): monkeypatch.setenv("GUNICORN_CMD_ARGS", "--foo=bar")