Модуль 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
  1. Я не вижу wsgi в опубликованной вами структуре файлов и поэтому не уверен, на какую именно папку статических файлов вы ссылаетесь

  2. Учитывая, что GAE (production) не имеет доступа к вашей файловой директории, я задаюсь вопросом, действительно ли os.path.abspath дает вам то, что вы хотите.

  3. Чтобы протестировать локально и смоделировать что-то близкое к production, вам нужно запустить ваше приложение с помощью dev_appserver.py. Я сам пробовал запускать Whitenoise локально с dev_appserver.py (используя базовое приложение hello world) и не испытывал никаких проблем (обратите внимание, что я не использовал os.path.abspath; вместо этого я использовал относительный путь к папке статических файлов). Но учитывая, что app.yaml работает со статическими файлами, я задаюсь вопросом, действительно ли используется Whitenoise.

  4. Ваш app.yaml никогда не будет направлять урлы в обработчик auto. Все всегда будет направляться в статический каталог. Это происходит потому, что url regex для обоих обработчиков одинаковы, но обработчик статической директории стоит на первом месте, поэтому он и будет выбран. Также обратите внимание, что если вы не тестируете локально с помощью dev_appserver.py, ваш app.yaml будет обойден при локальном запуске

    .
Вернуться на верх