使用 nginx、uWSGI 和 virtualenv 部署 Flask 应用程序

使用 nginx、uWSGI 和 virtualenv 部署 Flask 应用程序

我在 CentOS 6 服务器上部署 Flask 应用程序时遇到了很多麻烦。我知道有人问过有关这个问题的其他一些问题,但我还没有成功。

描述

默认 Python 是 Python 2.6.6
nginx 版本是 1.0.15
uWSGI 版本是 1.2.5
我的 virtualenv 文件夹是 /home/me/dev/.venv
我的 virtualenv Python 版本是 2.7.3(我想用 uWSGI 运行 Python 2.7.3)
我的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 并从激活的环境中运行它来运行我的应用程序(对于那些可能偶然发现我的帖子并发现它是一个可接受的解决方案的人来说,这些命令):

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

我是否应该始终从虚拟环境运行 uwsgi?有没有更简洁的方法可以做到这一点?

答案1

我总是在虚拟环境中安装 uwsgi。这样更简洁,而且如果你运行多个应用程序,你可以通过多种方式安装 uwsgi。

我认为您上面的错误是由于没有正确设置 python 路径造成的,因此它不知道 flask 安装在哪里,因为它没有在您的虚拟环境中搜索它。您的站点文件也是如此。

相关内容