Задать вопрос

UWSGI и ошибки импорта?

Здравствуйте.

Есть проект на django. Хостится он на стандартной связке uwsgi+nginx
Проблема в следующем:
если проект запускать как ./manage.py runserver или ./manage.py run_gunicorn (при установленном соотв. модуле) то все прокатывает и работает без ошибок. С UWSGI же начинаются абсолютно не объяснимые явления в виде "cannot import name что угодно"

Обычно это происходит после добавления (или изменения) моделей Django и лечится либо lazy Relationships либо импортом по месту использования.

Вопрос заключается в следующем: откуда такая разница между джанговским validate и тем что происходит в UWSGI.
  • Вопрос задан
  • 3161 просмотр
Подписаться 5 Оценить Комментировать
Решения вопроса 1
zxmd
@zxmd Автор вопроса
Вопрос закрыт. Была проблема с django_debug_toolbar, он импортировался криво и вызывал обвал импорта. Отключение и переконфигурация - помогли.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
vvpoloskin
@vvpoloskin
Инженер связи
Может быть дело в том, что после изменений надо перезапускать uwsgi-сервер? Когда вы запускаете сервер командой ./manage.py, все изменения в коде отслеживаются и после записи он незаметно перезапускается. Когда же запущено через uwsgi - надо это делать вручную.
Отсюда же исходит ответ на Ваш вопрос - при работе через manage.py используются джанговские служебные методы, при работе через uwsgi - методы wsgi.
Ответ написан
Vintorez
@Vintorez
Не уверен, но возможно это размышление поможет. Обычно ошибки типа "cannot import name" возникают если пути указаны неверно. Внутренние пути проекта указаны относительно самого проекта. А вот знает ли сам модуль uwsgi путь до проекта?! В настройках модуля есть опция chdir, которая переходит в нужный вам каталог еще до запуска модуля. Возможно она у вас не указана. Либо неверно указана переменная pythonpath.
Например, я запускаю uwsgi с помощью supervisor (но можно и без него) вот такой командой:
/usr/local/bin/uwsgi --yaml /etc/uwsgi/apps-enabled/uwsgi.yaml

а сам файл настроек uwsgi.yaml выглядит так:
uwsgi:
    uid: user_name
    gid: user_group
    socket: /tmp/uwsgi.sock
    chmod-socket: 666
    chdir: /opt/project_dir/
    pythonpath: /opt/project_dir/project_name/
    env: DJANGO_SETTINGS_MODULE=project_name.settings
    module: project_name.wsgi
    max-requests: 5000
    buffer-size: 32768
    post-buffering: 8192
    enable-threads: 1
    harakiri: 660
    reload-mercy: 8
    master: 1
    no-orphans: 1
    vacuum: 1

Возможно пригодится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы