python - 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-configurations 的一个问题,但如果我只是用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
推荐阅读
- sql - 在 WHERE 子句中使用 AND 和 OR 条件得到错误结果
- java - 如果另一个 SwitchPreference 被禁用,我如何禁用 SwitchPreference?
- python - sqlalchemy.exc.InvalidRequestError
- office-addins - 直接从项目加载项面板加载项目工作簿
- c# - CS0246 的 ASPNET 原因:找不到类型或命名空间名称“UserRemoteSessionsDAO”错误?
- java - 在 Java 中优化 128 位序列按位运算
- node.js - 如何从 Google Text-to-Speech API(fs.writeFile vs createWriteStream)将文件写入 Firebase Storage?
- c# - 将 0 到 1 之间的 a 标准化为给定的最小值和最大值
- javascript - 将 Calendly 嵌入 React
- html - li元素内的div内的响应img?