Развертывание приложения Flask с помощью nginx, uWSGI и virtualenv

У меня много проблем с развертыванием приложения Flask на сервере CentOS 6. Я знаю, что было задано еще несколько вопросов, касающихся этой проблемы, но мне пока не удалось.

Описание

Python по умолчанию - Python 2.6.6
nginx версия 1.0.15
UWSGI версия 1.2.5
Моя папка virtualenv - это /home/me/dev/.venv
Моя версия Python virtualenv - 2.7.3 (я хочу запустить Python 2.7.3 с uWSGI)
мой app.run() Файл Python является /home/me/dev/runserver.py
Мои файлы, модули, классы и т. Д. Находятся в /home/me/dev/contacts

Что я пробовал

Вот соответствующая часть nginx.conf:

server {
listen 80;
    access_log off;
    # ...

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;
    }
}

Вот полный runserver.py:

from contacts import app

if __name__ == "__main__":
    app.run()

Согласно документации, я попытался выполнить следующую команду:

uwsgi -H .venv/ -s 127.0.0.1:3031 -w runserver:app

У меня есть две проблемы:
- uWSGI по-прежнему работает на версии Python 2.6.6
- У меня есть 'import site' failed ошибка
- У меня есть ImportError: No module named flask ошибка, которая, скорее всего, связана с предыдущей ошибкой

Я также попробовал следующую команду из краткого руководства на официальном сайте uWSGI:

uwsgi --socket 127.0.0.1:3031 --file runserver.py --callable app --processes 2 -H .venv/

Но у меня точно такие же проблемы, как и раньше.

Я полностью потерян в данный момент, я пробовал другие команды, но я не могу понять, что еще я должен сделать.

Что я могу сделать, чтобы запустить uWSGI из моей виртуальной среды?

Редактировать: Хорошо, поэтому после нескольких других попыток мне удалось запустить мое приложение, установив uWSGI в моем virtualenv и запустив его из активированной среды (команды для тех, кто может наткнуться на мои сообщения и найти приемлемое решение):

$ . .venv/bin/activate
$ which uwsgi
/home/me/dev/.venv/bin/uwsgi
$ uwsgi -s :3031 -w runserver:app -H .venv/

Должен ли я всегда запускать uwsgi из виртуальной среды? Нет ли более чистого способа сделать это?

1 ответ

Я всегда устанавливал UWSGI в моем virtualenv. Это намного чище, и если вы запускаете несколько приложений, вы можете установить uwsgi несколькими способами.

Я думаю, что вы спотыкаетесь выше, неправильно указав путь к питону, поэтому он не знает, где установлена ​​фляга, поскольку он не ищет его в вашем virtualenv. То же самое с файлом вашего сайта.

Другие вопросы по тегам