Apache SetEnv not working as expected with mod_wsgi
Note that the WSGI environment is passed upon each request to the application in the environ
argument of the application object. This environment is totally unrelated to the process environment which is kept in os.environ
. The SetEnv
directive has no effect on os.environ
and there is no way through Apache configuration directives to affect what is in the process environment.
So you have to do something else other than getenviron
or os.environ['PWD']
to get the MY_PATH
from apache.
Flask adds the wsgi environ to the request, not app.environ
, it is done by the underlaying werkzeug
. So on each request to the application, apache will add the MYAPP_CONF
key and youll access it wherever you can access request it seems as, request.environ.get('MYAPP_CONFIG')
for example.
@rapadura answer is correct in that you don't have direct access to the SetEnv
values in your Apache config, but you can work around it.
If you add a wrapper around application
in your app.wsgi
file you can set the os.environ
on each request. See the following modified app.wsgi
for an example:
activate_this = '/var/www/michel/testenv/env/bin/activate_this.py'execfile(activate_this, dict(__file__=activate_this))from os import environ, getcwdimport logging, sysfrom testenv.webui import app as _application# You may want to change this if you are using another logging setuplogging.basicConfig(stream=sys.stderr, level=logging.DEBUG)LOG = logging.getLogger(__name__)LOG.debug('Current path: {0}'.format(getcwd()))# Application config_application.debug = Falsedef application(req_environ, start_response): environ['MYAPP_CONF'] = req_environ['MYAPP_CONF'] return _application(req_environ, start_response)
If you have set more environment variables in your Apache config, then you need to explicitly set each of them in the application
wrapper function.