Я пытаюсь в первый раз развернуть очень простое приложение Django на экземпляре AWS Lightsail. Я подготовил экземпляр AWS Apache, настроенный с помощью bitnami и django, и успешно выполнил инструкции tutorial без виртуальной среды, но с тех пор потратил часы, пытаясь добавить свой собственный проект с виртуальной средой.
Кажется, что большинство вещей настроено правильно, и я начинаю Apache нормально, только для того, чтобы перейти в браузере по моему URL-адресу и найти в журналах ошибок ошибку ModuleNotFoundError: No module named 'requests'
. Это первый импорт любого модуля, установленного через pip, в моем коде, поэтому предполагается, что мой виртуальный env не попал в мой PYTHONPATH. Я только что нашел решение, жестко закодировав путь к моим пакетам сайта и добавив его, используя sys.path.append(...)
в моем файле wsgi.py, но я не думаю, что это правильный способ настройки mod_wsgi с приложением django, и я беспокоюсь, что позже это приведет к непредвиденным проблемам.
Все django проекты на сервере расположены по адресу /opt/bitnami/apps/django/django-projects/
. Следуя руководству, этот каталог содержал проекты «Project» и «tutorial». Чтобы отделить мой файл requirements.txt
и виртуальную среду env
от этих проектов, я решил разместить свой проект (очень простое приложение, связанное с расовым равенством) в его собственной папке. Я подозреваю, что эта структура папок имеет решающее значение для моей проблемы:
django-projects/
Project/
tutorial/
re_app/
env/ # this is the virtual environmnent
requirements.txt
racial_equity_project/
conf/
httpd-app.conf
httpd-prefix.conf
db.sqlite3
manage.py
racial_equity_app/
urls.py
views.py
...
racial_equity_project/
settings.py
urls.py
wsgi.py
...
Я ожидал, что этот файл httpd-app.conf будет работать. Объявление python-home
кажется совместимым с docs .
Соответствующие файлы и трассировка стека ниже:
httpd-app.conf
<IfDefine_DJANGOSTACK_LOADED>
Define IS_DJANGOSTACK_LOADED
WSGIDaemonProcess wsgi-djangostack processes=2 threads=15 display-name=%{GROUP} python-home=/opt/bitnami/apps/django/django_projects/re_app/env
</IfDefine>
<Directory "/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/racial_equity_project">
Options +MultiViews
AllowOverride All
<IfVersion >= 2.3>
Require all granted
</IfVersion>
WSGIProcessGroup wsgi-djangostack
WSGIApplicationGroup %{GLOBAL}
</Directory>
Alias /racial_equity_project/static "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/contrib/admin/static"
WSGIScriptAlias /racial_equity_project '/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/racial_equity_project/wsgi.py'
wsgi.py
import os
import sys
sys.path.append('/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project')
sys.path.append('/opt/bitnami/apps/django/django_projects/re_app/env/lib/python3.7/site-packages') # this is what solved my problem, but is there a better solution?
os.environ.setdefault("PYTHON_EGG_CACHE", "/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/egg_cache")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "racial_equity_project.settings")
exec(open('/etc/racial_equity_project-production-envvars.py').read())
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Отслеживание от less /opt/bitnami/apache2/logs/error_log
[Fri Jun 19 16:43:17.041048 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] Traceback (most recent call last):, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041112 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/core/handlers/exception.py", line 34, in inner, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041117 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] response = get_response(request), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041123 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/utils/deprecation.py", line 94, in __call__, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041127 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] response = response or self.get_response(request), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041133 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/core/handlers/exception.py", line 36, in inner, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041137 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] response = response_for_exception(request, exc), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041143 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/core/handlers/exception.py", line 90, in response_for_exception, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041147 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041153 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/core/handlers/exception.py", line 128, in handle_uncaught_exception, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041158 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] callback, param_dict = resolver.resolve_error_handler(500), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041163 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/urls/resolvers.py", line 597, in resolve_error_handler, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041168 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] callback = getattr(self.urlconf_module, 'handler%s' % view_type, None), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041173 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/utils/functional.py", line 80, in __get__, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041177 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] res = instance.__dict__[self.name] = self.func(instance), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041183 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/urls/resolvers.py", line 577, in urlconf_module, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041187 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] return import_module(self.urlconf_name), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041193 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/python/lib/python3.7/importlib/__init__.py", line 127, in import_module, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041199 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] return _bootstrap._gcd_import(name[level:], package, level), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041205 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 1006, in _gcd_import, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041210 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 983, in _find_and_load, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041216 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041222 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 677, in _load_unlocked, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041227 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap_external>", line 728, in exec_module, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041233 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041239 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/racial_equity_project/urls.py", line 22, in <module>, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041243 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] path('', include('racial_equity_app.urls')),, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041248 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/urls/conf.py", line 34, in include, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041252 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] urlconf_module = import_module(urlconf_module), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041258 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/python/lib/python3.7/importlib/__init__.py", line 127, in import_module, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041262 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] return _bootstrap._gcd_import(name[level:], package, level), referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041267 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 1006, in _gcd_import, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041273 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 983, in _find_and_load, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041278 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041284 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 677, in _load_unlocked, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041290 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap_external>", line 728, in exec_module, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041295 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041301 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/racial_equity_app/urls.py", line 3, in <module>, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041305 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] from . import views, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041313 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] File "/opt/bitnami/apps/django/django_projects/re_app/racial_equity_project/racial_equity_app/views.py", line 6, in <module>, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041317 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] import requests, referer: http://3.20.187.50/
[Fri Jun 19 16:43:17.041328 2020] [wsgi:error] [pid 18658] [client 73.222.180.141:55118] ModuleNotFoundError: No module named 'requests', referer: http://3.20.187.50/
Есть идеи, почему эта конфигурация не использует мою виртуальную среду должным образом?