如何解决使用带有dotenv的Django堆栈使用WSGI查找.env问题
我有一个Django应用,我正在尝试使用dotenv保护我的SECRET_KEY。 manage.py runserver可以正常运行,但是以apache2托管的站点无法正常工作,并且apache给了我错误日志:
mod_wsgi (pid=32200): Failed to exec Python script file '/opt/bitnami/projects/accuhx/accuhx/wsgi.py'.
mod_wsgi (pid=32200): Exception occurred processing WSGI script '/opt/bitnami/projects/accuhx/accuhx/wsgi.py'.
Traceback (most recent call last):
File "/opt/bitnami/projects/accuhx/accuhx/wsgi.py",line 23,in <module>
application = get_wsgi_application()
File "/opt/bitnami/python/lib/python3.8/site-packages/django/core/wsgi.py",line 12,in get_wsgi_application
django.setup(set_prefix=False)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/__init__.py",line 19,in setup
configure_logging(settings.LOGGING_CONFIG,settings.LOGGING)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py",line 83,in __getattr__
self._setup(name)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py",line 70,in _setup
self._wrapped = Settings(settings_module)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py",line 196,in __init__
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
我认为这是因为我的manage.py可以找到.env,而wsgi.py却找不到,但是我不知道为什么。
我的结构
accuhx
|
|-manage.py
|-accuhx
| |
| |-settings.py
|-.env
|-wsgi.py
WSGI.py:
import os
import dotenv
from dotenv import load_dotenv,find_dotenv
load_dotenv(find_dotenv())
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE','accuhx.settings')
application = get_wsgi_application()
manage.py
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE','accuhx.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
.env
DJANGO_SECRET_KEY=p$********xr
settings.py
import os
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY")
我遵循了https://help.pythonanywhere.com/pages/environment-variables-for-web-apps/上的指南 和https://github.com/theskumar/python-dotenv
我的问题不是指向wsgi的.env正确路径吗?为什么它适用于manage.py runserver但不适用于apache路由?
任何方向都会受到赞赏。
解决方法
我也遇到了同样的问题,并通过添加到settings.py
和wsgi.py
import os
from dotenv import load_dotenv
dotenv_path = os.path.join(os.path.dirname(__file__),'.env')
load_dotenv(dotenv_path)
sdarwin建议将路径硬编码为.env
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。