在Cherokee和uWSGI上部署Flask

2 投票
2 回答
4019 浏览
提问于 2025-04-16 12:36

我正在尝试部署一个我用cherokee和uwsgi开发的flask网页应用。我已经安装并让cherokee和uwsgi运行起来了(我觉得uwsgi是正常工作的),但是当我在cherokee中配置这个应用时,出现了一个错误,提示说 uWSGI Error wsgi application not found。我使用了一个xml配置文件(我想在cherokee中是需要这个的),文件内容如下:

<uwsgi>
    <pythonpath>/srv/mobile-site/app/</pythonpath>
    <app mountpoint="/">
        <module>mobilecms</module>
        <callable>app</callable>
    </app>
</uwsgi>

我的flask应用显然放在 /srv/mobile-site/app/ 文件夹里,主要的脚本是 mobilecms.py

这个文件有什么问题吗?权限错误会导致这个问题吗?提前谢谢大家的帮助!

2 个回答

2

在正式上线之前,最好先尝试直接用uWSGI来部署,而不使用任何网页服务器。

你可以用这个命令:uwsgi -x <xmlfile>

这样做会打印出很多信息和错误提示。

2

Roberto的建议很好,这可以帮助我们找出错误发生的地方(也就是说,是uWSGI的问题还是Cherokee的问题)。

我最近也在努力让uWSGI和Cherokee一起工作。最后我手动在Cherokee中配置了uWSGI的源:

  • 在Cherokee管理界面,找到“Sources”标签,添加一个新的源,起个名字叫“uWSGI Source”,并设置socket为“/tmp/foo.sock”。
    • 把类型改成“Local Interpreter”(本地解释器)
    • 在解释器字段中输入:/usr/local/bin/uwsgi -x /path/to/uwsgiconfig.xml
  • 在虚拟服务器的规则管理中,点击添加一个新的行为规则。
    • 选择手动配置,类型为“Directory”(目录),路径设置为“/”
    • 把处理程序设置为“uWSGI”
    • 滚动到最底部,把负载均衡器设置为“Round Robin”(轮询)
    • 添加“uWSGI Source”的信息源
  • 保存更改并重启Cherokee

在我的uWSGI配置文件中,我有类似这样的内容(根据你的例子调整过):

<uwsgi>
    <chdir>/srv/mobile-site/app/</chdir>
    <wsgi-file>/srv/mobile-site/app/mobilecms.py</wsgi-file>
    <callable>app</callable>

    <socket>/tmp/foo.sock</socket>
    <chmod-socket>666</chmod-socket>

    <master />
    <processes>1</processes>

    <disable-logging /><!-- Errors are still logged; this just disables request logging which Cherokee takes care of -->

    <vacuum />
    <no-orphans />
</uwsgi>

注意,Cherokee的uWSGI向导不接受这个作为有效的配置文件(所以需要手动配置)。

撰写回答