Cannot get environment variables in Django settings file
Solution 1
I've manage to solve my problem by using this solution:
http://drumcoder.co.uk/blog/2010/nov/12/apache-environment-variables-and-mod_wsgi/
Solution 2
I've just recently found the cause of this myself.
When running under apache/mod_wsgi, your application runs under a different user, so those environment variables are not set. Your options are:
- Use apache SetEnv directive in your virtualhost config,
- Set the environment variables for the user that apache runs your code as, or
- Tell apache to run the wsgidaemon process as your user.
Related videos on Youtube
luistm
Updated on June 04, 2022Comments
-
luistm almost 2 years
I'm trying to read some environment variables in Django settings, which i have defined in /home/user/.bashrc (and latter in /etc/bash.bashrc ) , but all i get is a KeyError exception. I know my environment variables are set, because i can print them in the terminal (echo $VAR_NAME). This should be trivial.
This is the code i'm using.
from django.core.exceptions import ImproperlyConfigured msg = "Set the %s environment variable" def get_env_variable(var_name): try: return os.environ[var_name] except KeyError: error_msg = msg % var_name raise ImproperlyConfigured(error_msg) OS_DB_USER = get_env_variable('MY_USER') OS_DB_PASS = get_env_variable('MY_PASS') OS_DB_DB = get_env_variable('MY_DB') OS_GAME_LOGS = get_env_variable('DIR_LOGS')
I just can't find what's missing. Any suggestions out there?
Thanks
EDIT: Running on Apache with mod_wsgi.
-
Graham Dumpleton almost 9 yearsFor process environment variables, none of those will strictly work. The SetEnv directive only sets per request WSGI environ variables and not process environment variables. Setting stuff in the environment of the Apache user will not help as Apache is started as root and inherits a clean default host environment. You do not want to be adding stuff to global default host environment. And using daemon mode as a specific user will not help either, as users login scripts are never executed and so now way environment variables can be picked up in that way.
-
Graham Dumpleton almost 9 yearsThe easiest thing to do is to set any process environment variables as a side effect of the WSGI script file being loaded.