Reputation: 435
I'm just in a bog with this. Figured this should work fine on both development and production (having set the environment variables on both with two different methods, but I'm obv. wrong. It only works on production. On development it throws a long error ending with "django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty."
try:
SECRET_KEY = os.getenv("PRODUCTION_SECRET_KEY")
except:
SECRET_KEY = os.environ.get('DEVELOPMENT_SECRET_KEY')
Upvotes: 1
Views: 355
Reputation: 1333
Let's make a simple singleton class!
class Secret(object):
def __new__(cls):
cls.key = os.getenv('PRODUCTION_SECRET_KEY') or os.getenv('DEVELOPMENT_SECRET_KEY')
if cls.key is None:
raise SomeError
Upvotes: 0
Reputation: 1855
os.getenv()
doesn't throw an error if the environment variable doesn't exist. Therefore, even on your development environment, the os.getenv()
call will most likely succeed, setting SECRET_KEY
to an empty value, causing the Django error (which even says that the setting is empty).
You should not use a try/except
statement as no error is thrown. Instead, you should use an if
statement, for example:
SECRET_KEY = os.getenv('PRODUCTION_SECRET_KEY')
if not SECRET_KEY:
SECRET_KEY = os.getenv('DEVELOPMENT_SECRET_KEY')
Upvotes: 1