12

有谁知道如何mod_wsgi在任何模块发生更改时自动重新加载 Flask 应用程序?我试过WSGIScriptReloading On了,但没有运气。官方文档有点像熊......我想如果没有人知道,我会给它一个刺。提前致谢!

此外,如果它不能因语法错误(如 Flask 重新加载器)而永久崩溃,那就太好了。

4

6 回答 6

19

使用mod_wsgi,WSGIScriptReloading查找对.wsgi配置文件的更改,而不是代码。

我的工作流程是上传我的代码更改然后只是

$ touch MyWebApp.wsgi

这会导致最后修改的文件时间戳更改并mod_wsgi 重新加载代码。

您可以通过将.wsgi文件保存在本地计算机上然后再次上传来“远程”执行此操作,或者我只是通过 SSH 执行此操作。

对于语法错误,您无能为力,代码要么正在运行,要么没有,但修复加上 atouch将使其再次运行。

如果您通过 FTP 工作,需要注意的一个问题是:确保最后.wsgi上传“接触”文件,否则它将尝试从错误的代码开始。

于 2012-11-28T13:09:02.277 回答
1

我认为想要在生产中自动重新加载源代码是一个非常现实的情况。考虑一个环境,其中每个版本都部署了源,并且“生产”符号链接指向其中一个版本。每当您想发布较新版本时,只需将符号链接指向另一条路径。但是 apache 和 mod_wsgi 仍然从符号链接目录中收集文件,因此需要根据时间戳、大小或 w/e 建立重新加载机制。当然,一个应用程序可能不是问题,但是托管 15-20 个都在积极开发中的应用程序呢?在这种情况下,与每次重新启动 apache 相比,不自动重新加载源是一种纯粹的损失。

回到问题:如果您使用的框架(在本例中为 flask)没有用于自动重新加载源代码的插件或工具,那么 Graham 和 Malphas 描述的两个选项是您的最佳选择。要么触发 wsgi 进程重启,要么实现监控系统。

于 2012-12-13T13:36:33.160 回答
1

您对添加 WSGIScriptReloading 指令是正确的。Flask 文档并没有使其 100% 清楚,但 Apache 会查找对您的 .wsgi 文件的更改。推荐的解决方案是在您的 .wsgi 文件上执行一个触摸命令,作为发布过程的一部分。

于 2014-07-19T13:20:57.270 回答
0

对于生产我也更喜欢 apache mod_wsgi,而对于开发我使用烧瓶的内置服务器。我将 prod 和 dev 配置文件分开,并在 dev 配置中设置debug指令True,以便 Flask 可以自动检测和重新加载代码更改。

于 2015-04-17T09:41:49.127 回答
-1

这个问题的正确答案是WSGIScriptReloading On需要将其添加到000-default.conf当前/etc/apache2/sites-enabled文件夹中。

见下面的例子

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerName sentiments.live
        ServerAdmin admin@sentiments.live
        DocumentRoot /var/www/html
        WSGIDaemonProcess flaskapp threads=5
        WSGIScriptAlias / /var/www/html/sentiments/flaskapp.wsgi

        <Directory sentiments>
                WSGIScriptReloading On
                WSGIProcessGroup sentiments
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>
于 2018-03-06T18:39:03.773 回答
-2

你是什​​么意思'官方文件有点像熊'?包含的食谱有什么问题:

该文档还解释了为什么 WSGIScriptReloading 没有达到您的预期。

不,不可能因为语法错误而永久崩溃。它嵌入在 Apache 中,而 Apache 的全部意义在于保持运行。

听起来您不应该使用 Apache/mod_wsgi 进行开发。每个人都知道不应该在生产中使用自动源代码重新加载,所以无法想象你会想要这样做。

于 2012-11-23T09:30:13.400 回答