Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move setting of environmental variables (configured via the raw_env sett... #740

Merged
merged 1 commit into from
May 13, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions gunicorn/arbiter.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ def setup(self, app):
in sorted(self.cfg.settings.items(),
key=lambda setting: setting[1]))))

# set enviroment' variables
if self.cfg.env:
for k, v in self.cfg.env.items():
os.environ[k] = v

if self.cfg.preload_app:
self.app.wsgi()

Expand All @@ -121,11 +126,6 @@ def start(self):
self.pidfile.create(self.pid)
self.cfg.on_starting(self)

# set enviroment' variables
if self.cfg.env:
for k, v in self.cfg.env.items():
os.environ[k] = v

self.init_signals()
if not self.LISTENERS:
self.LISTENERS = create_sockets(self.cfg, self.log)
Expand Down
57 changes: 57 additions & 0 deletions tests/test_008-arbiter-env.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# -*- coding: utf-8 -
#
# This file is part of gunicorn released under the MIT license.
# See the NOTICE for more information.

import t
import os
from gunicorn.app.base import BaseApplication
import gunicorn.arbiter


class PreloadedAppWithEnvSettings(BaseApplication):
"""
Simple application that makes use of the 'preload' feature to
start the application before spawning worker processes and sets
environmental variable configuration settings.
"""

def init(self, parser, opts, args):
"""No-op"""
pass

def load(self):
"""No-op"""
pass

def load_config(self):
"""Set the 'preload_app' and 'raw_env' settings in order to verify their
interaction below.
"""
self.cfg.set('raw_env', [
'SOME_PATH=/tmp/something', 'OTHER_PATH=/tmp/something/else'])
self.cfg.set('preload_app', True)

def wsgi(self):
"""Assert that the expected environmental variables are set when
the main entry point of this application is called as part of a
'preloaded' application.
"""
verify_env_vars()
return super(PreloadedAppWithEnvSettings, self).wsgi()


def verify_env_vars():
t.eq(os.getenv('SOME_PATH'), '/tmp/something')
t.eq(os.getenv('OTHER_PATH'), '/tmp/something/else')


def test_env_vars_available_during_preload():
"""Ensure that configured environmental variables are set during the
initial set up of the application (called from the .setup() method of
the Arbiter) such that they are available during the initial loading
of the WSGI application.
"""
# Note that we aren't making any assertions here, they are made in the
# dummy application object being loaded here instead.
gunicorn.arbiter.Arbiter(PreloadedAppWithEnvSettings())