Модуль whitenoise не найден в производстве
Ошибка: Я столкнулся с этой ошибкой при попытке развернуть мое приложение Django с помощью GAE: ModuleNotFoundError: Нет модуля с именем 'whitenoise'. Ошибка возникает при запуске wsgi приложения.
Попытки исправления: Обертывание wsgi в whitenoise, как упоминалось здесь, было сделано (https://whitenoise.readthedocs.io/en/stable/index.html#quickstart-for-django-apps), но это ничего не изменило. whitenoise 6.7.0 загружен и находится в requirements.txt, а необходимое промежуточное ПО whitenoise находится в settings.py.
Вопрос: Как мне заставить wsgi найти мой модуль whitenoise (и wiki)? Или какой подход лучше для развертывания моего приложения?
wsgi.py
import os
import sys
from django.core.wsgi import get_wsgi_application
from whitenoise import WhiteNoise
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
PROJECT_PATH = os.path.abspath(os.path.dirname(os.path.split(__file__)[0]))
PROJECT_PARENT = os.path.abspath(os.path.split(PROJECT_PATH)[0])
sys.path.append(PROJECT_PATH)
sys.path.append(PROJECT_PARENT)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproject.settings")
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
application = get_wsgi_application()
application = WhiteNoise(application, root=os.path.join(PROJECT_DIR, 'static'))
app.yaml с url, скрытым для этого сообщения
# app.yaml
runtime: python311
env: standard
entrypoint: gunicorn -b :$PORT testproject.wsgi
env_variables:
APPENGINE_URL: my_url
DJANGO_SETTINGS_MODULE: "testproject.settings"
handlers:
- url: /.*
static_dir: static/
- url: /.*
script: auto
runtime_config:
python_version: 3
Журналы
Структура файла
wikiward
├── docs
│ ├── development
│ └── tips
├── src
│ └── wiki
│ ├── conf
│ ├── core
│ ├── editors
│ ├── locale
│ ├── migrations
│ ├── models
│ ├── plugins
│ ├── __pycache__
│ ├── static
│ ├── templates
│ ├── templatetags
│ └── views
├── testproject
│ ├── chroma_db
│ │ ├── 0aae09e0-5737-4147-a4a8-af1862d43f5b
│ │ ├── 3dd02d2f-f076-49de-ab76-56387dcf8f5e
│ │ ├── 52816e06-f9e5-4edd-9e29-572312e7087c
│ │ ├── 569d1063-0ee1-4b79-8d8b-d5c3110157d9
│ │ ├── 5fc4762c-2dfe-4cd8-8b0c-d615abb80300
│ │ └── 6602c433-53ad-47bd-a81f-3597bd38eae7
│ ├── fixtures
│ ├── media
│ │ └── wiki
│ ├── __pycache__
│ ├── settings
│ │ └── __pycache__
│ ├── static
│ │ ├── admin
│ │ ├── django-browser-reload
│ │ ├── mptt
│ │ └── wiki
│ ├── templates
│ ├── testproject
│ └── theme
│ ├── __pycache__
│ ├── static_src
│ └── templates
├── tests
│ ├── core
│ ├── plugins
│ │ ├── attachments
│ │ ├── editsection
│ │ ├── globalhistory
│ │ ├── images
│ │ ├── links
│ │ ├── macros
│ │ ├── notifications
│ │ ├── pymdown
│ │ └── redlinks
│ └── testdata
│ └── migrations
└── theme
├── __pycache__
├── static_src
│ └── src
└── templates
Я не вижу
wsgi
в опубликованной вами структуре файлов и поэтому не уверен, на какую именно папку статических файлов вы ссылаетесьУчитывая, что GAE (production) не имеет доступа к вашей файловой директории, я задаюсь вопросом, действительно ли
os.path.abspath
дает вам то, что вы хотите.Чтобы протестировать локально и смоделировать что-то близкое к production, вам нужно запустить ваше приложение с помощью
dev_appserver.py
. Я сам пробовал запускать Whitenoise локально сdev_appserver.py
(используя базовое приложение hello world) и не испытывал никаких проблем (обратите внимание, что я не использовалos.path.abspath
; вместо этого я использовал относительный путь к папке статических файлов). Но учитывая, чтоapp.yaml
работает со статическими файлами, я задаюсь вопросом, действительно ли используется Whitenoise.Ваш
.app.yaml
никогда не будет направлять урлы в обработчикauto
. Все всегда будет направляться в статический каталог. Это происходит потому, что url regex для обоих обработчиков одинаковы, но обработчик статической директории стоит на первом месте, поэтому он и будет выбран. Также обратите внимание, что если вы не тестируете локально с помощьюdev_appserver.py
, вашapp.yaml
будет обойден при локальном запуске