[Solved]-Django + mod_wsgi. Set OS environment variable from Apache's SetEnv


This is related to question Access Apache SetEnv variable from Django wsgi.py file

You need to inherit WSGIHandler as the answer says.

As Graham Dumpleton explains in the second answer,

That all said, the blog post you mention will not usually help. This
is because it is using the nasty trick of setting the process
environment variables on each request based on the per request WSGI
environ settings set using SetEnv in Apache. This can cause various
issues in a multi threading configuration if the values of the
environment variables can differ based on URL context. For the case of
Django, it isn’t helpful because the Django settings module would
normally be imported before any requests had been handled, which means
that the environment variables would not be available at the time

and I think this is what is happening in your case.


I solved this problem by changing wsgi.py to this:

from django.core.handlers.wsgi import WSGIHandler
import django
import os

class WSGIEnvironment(WSGIHandler):

    def __call__(self, environ, start_response):

        os.environ['USKOVTASK_PROD'] = environ['USKOVTASK_PROD']
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "uskovtask.settings")
        return super(WSGIEnvironment, self).__call__(environ, start_response)

application = WSGIEnvironment()

Leave a comment