Django-configurations 在使用 UWSGI 时找不到我的配置



我正试图将Django==2.1项目从一个AWS实例迁移到另一个实例。我没有创建这个项目,所以我不确定他们在部署时遵循的所有步骤。我看到uWSGI==2.0.19.1在requirements.txt文件中,所以我试图使用它在8000端口运行项目。

该项目还使用库django-configurations==2.1来管理多个配置。它们位于一个名为config的文件夹中。

project/
  config/
    __init__.py
    common.py
    development.py
    local.py
    production.py
    staging.py
  manage.py
  wsgi.py
  ...

config文件夹中的__init__.py文件包含以下内容:

from __future__ import absolute_import
from .local import Local
from .staging import Staging
from .production import Production
from .development import Development

我正在尝试运行以下命令:
uwsgi --http :8000 --module wsgi:application --chdir=/path/to/project
我收到了此错误:

Traceback (most recent call last):
  File "./wsgi.py", line 16, in <module>
    from configurations.wsgi import get_wsgi_application
  File "/path/to/project/.env/lib/python3.6/site-packages/configurations/wsgi.py", line 14, in <module>
    application = get_wsgi_application()
  File "/path/to/project/.env/lib/python3.6/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/path/to/project/.env/lib/python3.6/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/path/to/project/.env/lib/python3.6/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/path/to/project/.env/lib/python3.6/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/path/to/project/.env/lib/python3.6/site-packages/django/conf/__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/path/to/project/.env/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/path/to/project/.env/lib/python3.6/site-packages/configurations/importer.py", line 163, in load_module
    mod.__package__))
  File "/path/to/project/.env/lib/python3.6/site-packages/configurations/importer.py", line 159, in load_module
    cls = getattr(mod, self.name)
AttributeError: Couldn't find configuration 'Production
' in module 'config':  module 'config' has no attribute 'Production
' 
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 20490, cores: 1)

因此,这似乎是django配置的一个问题,但如果我只是用DJANGO_CONFIGURATION=Production manage.py runserver 0.0.0.0:8000运行服务器,它就可以正常工作。

如果我试图运行在django shell中抛出错误的同一行代码,它会起作用:

Python 3.6.9 (default, Jul 17 2020, 12:50:27) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import config
>>> getattr(config, 'Production')
<Configuration 'config.production.Production'>

wsgi.py文件包含以下内容:

import os
if os.getenv('local_settings'):
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "local.settings")
    from django.core.wsgi import get_wsgi_application
else:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config")
    os.environ.setdefault("DJANGO_CONFIGURATION", "Production")
    from configurations.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)

我很感激能得到的任何帮助。

您的uwsgi配置有点混淆

[uwsgi]
basedir = %d
chdir = %(basedir)
master=True
vacuum=True
max-requests=5000
pythonpath = %(basedir)src/
wsgi-file  = %(basedir)src/bear/wsgi.py
env = DJANGO_SETTINGS_MODULE=bear.settings.production
; -- Static serve
mimefile   = %(basedir)uwsgi.mime
static-gzip-all = true
static-check = %(basedir)public
static-safe = %(basedir)public

创建一个uwsgi.ini文件,在其中定义:

  • pythonpath=定义项目的主目录
  • wsgi file=找到django-uwsgi.py文件
  • env=uwsgi将在生产模式下运行。定义环境
  • static-check=找到静态文件管理器,或者您可以使用nginx为其提供服务。您可以选择collectstatic
  • mimefile=mimefile.mime
uwsgi --ini uwsgi.ini --http :8000

示例:https://github.com/LabTrendig/django-bear

相关内容

最新更新