Aus*_*tin 5 django wsgi apache2 django-wsgi
我有一个 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.
Run Code Online (Sandbox Code Playgroud)
我假设这是因为我的 manage.py 可以找到 .env 但 wsgi.py 不能,但我不知道为什么。
我的结构:
accuhx
|
|-manage.py
|-accuhx
| |
| |-settings.py
|-.env
|-wsgi.py
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
管理.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()
Run Code Online (Sandbox Code Playgroud)
.env
DJANGO_SECRET_KEY=p$********xr
Run Code Online (Sandbox Code Playgroud)
设置.py
import os
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY")
Run Code Online (Sandbox Code Playgroud)
我按照https://help.pythonanywhere.com/pages/environment-variables-for-web-apps/ 和https://github.com/theskumar/python-dotenv上的指南进行操作
我的问题是否没有指向 wsgi 的 .env 的正确路径?为什么它适用于manage.py runserver 但不适用于apache 路由?
任何方向将不胜感激。
小智 9
我遇到了同样的问题并通过添加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)
Run Code Online (Sandbox Code Playgroud)
sdarwin 建议将路径硬编码到 .env
https://github.com/theskumar/python-dotenv/issues/210
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |