Развертывание приложения 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. То же самое с файлом вашего сайта.