我正试图将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