首页 > 解决方案 > 变量 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进行检查

感谢你们对我的帮助。

标签: pythondjangoapachevirtualenv

解决方案


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/中的示例


推荐阅读