python - 变量 DJANGO_CONFIGURATION 未定义 - Django + virtual env + apache
问题描述
我尝试在我的 apache 服务器中部署我的 Django 应用程序。尽管我阅读了所有教程和线程(包括 stackoverflow),但我仍然无法找到解决方案。
就上下文而言,我使用虚拟环境和 Django 3+ 在本地制作了一个 Django 应用程序。我的下一步是将它放在 Apache 服务器中。
因此,从我的 github 帐户中提取后,我在服务器上设置了一个虚拟环境,使用
virtualenv env
然后我运行以下命令行来安装要求
pip install -r requirements.txt
到目前为止,一切都很好。
基本上,配置虚拟主机后,我有以下错误:
**django.core.exceptions.ImproperlyConfigured: Configuration cannot be imported, environment variable DJANGO_CONFIGURATION is undefined.**
我精确(将在下面包含)所有内容都已正确安装并且已设置环境变量。
这是我的日志project_error.log:
[Fri Apr 24 17:54:52.416771 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] mod_wsgi (pid=30069): Target WSGI script '/var/www/admin-dashboard/project/wsgi.py' cannot be loaded as Python module.
[Fri Apr 24 17:54:52.416903 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] mod_wsgi (pid=30069): Exception occurred processing WSGI script '/var/www/admin-dashboard/project/wsgi.py'.
[Fri Apr 24 17:54:52.417460 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] Traceback (most recent call last):
[Fri Apr 24 17:54:52.417527 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] File "/var/www/admin-dashboard/project/wsgi.py", line 1, in <module>
[Fri Apr 24 17:54:52.417545 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] from configurations.wsgi import get_wsgi_application
[Fri Apr 24 17:54:52.417565 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] File "/var/www/admin-dashboard/env/lib/python3.6/site-packages/configurations/wsgi.py", line 3, in <module>
[Fri Apr 24 17:54:52.417581 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] importer.install()
[Fri Apr 24 17:54:52.417600 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] File "/var/www/admin-dashboard/env/lib/python3.6/site-packages/configurations/importer.py", line 49, in install
[Fri Apr 24 17:54:52.417616 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] importer = ConfigurationImporter(check_options=check_options)
[Fri Apr 24 17:54:52.417635 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] File "/var/www/admin-dashboard/env/lib/python3.6/site-packages/configurations/importer.py", line 68, in __init__
[Fri Apr 24 17:54:52.417650 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] self.validate()
[Fri Apr 24 17:54:52.417669 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] File "/var/www/admin-dashboard/env/lib/python3.6/site-packages/configurations/importer.py", line 111, in validate
[Fri Apr 24 17:54:52.417685 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] raise ImproperlyConfigured(self.error_msg.format(self.namevar))
[Fri Apr 24 17:54:52.417715 2020] [wsgi:error] [pid 30069] [remote 193.248.218.163:55647] django.core.exceptions.ImproperlyConfigured: Configuration cannot be imported, environment variable DJANGO_CONFIGURATION is undefined.
000-default.conf
<VirtualHost *:80>
ServerAdmin contact@project.ai
ServerName domain.ai
ServerAlias admin.domain.ai
Alias /static /var/www/admin-dashboard/static/
Alias /media /var/www/admin-dashboard/media/
WSGIDaemonProcess project python-home=/var/www/admin-dashboard/env python-path=/var/www/admin-dashboard
WSGIProcessGroup project
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /var/www/admin-dashboard/project/wsgi.py
<Directory /var/www/admin-dashboard/static>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/admin-dashboard/media>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/admin-dashboard>
Order deny,allow
Allow from all
</Directory>
DocumentRoot /var/www/admin-dashboard
ErrorLog ${APACHE_LOG_DIR}/project_error.log
CustomLog ${APACHE_LOG_DIR}/project_access.log combined
wsgi.py
from configurations.wsgi import get_wsgi_application
import os
import sys
import site
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
path = BASE_DIR
if path not in sys.path:
sys.path.append(path)
PROJECT_PATH=abspath(join(dirname(__file__), "."))
sys.path.append(PROJECT_PATH)
# Calculate path to site-packages directory.
vepath = PROJECT_PATH+'/env'
python_version = '.'.join(map(str, sys.version_info[:2]))
site_packages = vepath + '/lib/python%s/site-packages' % python_version
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir(vepath)
site.addsitedir(site_packages)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
application = get_wsgi_application()
在运行之前,我注意设置我的环境变量
export DJANGO_SETTINGS_MODULE=project.settings
export DJANGO_CONFIGURATION=Prod
请注意,一切都已正确安装,因为当我运行时python manage.py runserver
,它正在工作。它在本地也能正常工作。
以防万一,我的 requirements.txt:
asgiref==3.2.7
certifi==2020.4.5.1
chardet==3.0.4
Django==3.0.5
django-admin-sortable2==0.7.6
django-bootstrap-modal-forms==1.5.0
django-configurations==2.2
django-crispy-forms==1.9.0
django-daterangefilter==1.0.0
django-filter==2.2.0
django-material-admin==1.7.0
django-mysql==3.4.0
geographiclib==1.50
geopy==1.21.0
get==2019.4.13
idna==2.9
mod-wsgi==4.7.1
mysqlclient==1.4.6
Pillow==7.1.1
post==2019.4.13
public==2019.4.13
python-decouple==3.3
pytz==2019.3
query-string==2019.4.13
request==2019.4.13
requests==2.23.0
six==1.14.0
sqlparse==0.3.1
urllib3==1.25.9
任何想法为什么会出现这个错误?DJANGO_CONFIGURATION 已设置,我可以使用printenv进行检查
感谢你们对我的帮助。
解决方案
放
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
前
from configurations.wsgi import get_wsgi_application
就像https://django-configurations.readthedocs.io/en/stable/中的示例
推荐阅读
- microdata - 这种结构化数据的使用与 JSON-LD 不兼容吗?
- javascript - 在 NetSuite 中提交时调用 Web 服务
- java - 如何修复:令牌上的语法错误、错误的构造错误
- c# - 在 Unity 中获取多个 GameObjects 之间的中心点
- bash - 在 bash 上处理 $'\346' 等特殊字符
- authentication - Nancy 503 错误切换到 OWIN 自主机
- html - iframe 为空时隐藏 div
- css - 我的 Navbar.css 没有改变我的 Navbar.jsx
- javascript - Firebase,orderByChild 没有排序
- wordpress - wp-bakery 的位置和文件夹名称