【问题标题】:mod_wsgi keeps restarting flask app [duplicate]mod_wsgi 不断重启烧瓶应用程序 [重复]
【发布时间】:2018-07-08 12:04:30
【问题描述】:

从 Flask 的文档中,我的配置中有以下内容:

<VirtualHost *>
    ServerName example.com

    WSGIDaemonProcess yourapplication user=user1 group=group1 threads=5
    WSGIScriptAlias / /var/www/yourapplication/yourapplication.wsgi

    <Directory /var/www/yourapplication>
        WSGIProcessGroup yourapplication
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

在我的 .wsgi 文件中,我导入了正确的 python 文件并将烧瓶应用程序作为应用程序导入。一切正常,但我在该文件中添加了日志记录,因为我怀疑出了点问题。显然,只要浏览器建立连接,就会经常调用该 wsgi 文件。它重新启动应用程序(或至少一个新进程)。在我导入 flask-login 来管理经过身份验证的会话之前,我从未注意到这一点,也没有将其视为问题。现在,每当我登录时,经过一段时间后,wsgi 应用程序就会重新加载,并且会话历史记录不再存在。实际上,我必须每隔几秒登录一次。这是 mod_wsgi 的预期工作方式吗?我已经测试了在独立模式下运行的烧瓶应用程序(烧瓶自己的开发服务器),它可以完美运行。

在某种程度上它是重复的,但它也不是。服务器代码没有错误。只是 mod_wsgi 一遍又一遍地重新启动应用程序。不过,感谢您链接到其他帖子!

【问题讨论】:

  • 在某种程度上它是重复的,但它也不是。服务器代码没有错误。只是 mod_wsgi 一遍又一遍地重新启动应用程序。不过,感谢您链接到其他帖子!
  • 我同意它不是重复的。这个是关于 mod_wsgi 重新启动整个 Flask 应用程序(例如,当用户强制重新加载网页时会发生 - wsgi 启动一个新进程)。

标签: apache flask mod-wsgi flask-login


【解决方案1】:

所以我发现 wsgi 确实经常重启应用程序。我想这是预期的行为,但这不是我所期望的。我的注销问题是因为我在启动时生成了应用程序的密钥。因此,密钥一直在不断变化。显然,这会使 cookie 无效并注销用户。所以,我想如果你想生成一个密钥,而不仅仅是在你的源代码中包含纯文本,你需要在外部生成一次并将它导入到你的烧瓶应用程序中,这样它就不会总是改变。

【讨论】:

  • 如果这确实是您的配置,它不应该一直在重新启动应用程序。使用modwsgi.readthedocs.io/en/develop/user-guides/… 的检查来验证您是否确实在使用守护程序模式。尽管您的配置说明了什么,但您看到的行为表明您正在使用嵌入式模式,它的行为方式与 Apache(而不是 mod_wsgi)可以回收进程一样。也去阅读modwsgi.readthedocs.io/en/develop/user-guides/…
  • 我建议您在虚拟主机之外添加WSGIRestrictEmbedded On 以关闭嵌入式模式,以确保您使用的是守护进程模式。还要设置LogLevel info,以便 mod_wsgi 记录有关守护进程重新启动及其发生原因的消息。
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 2018-10-06
  • 2018-07-23
  • 2017-06-27
  • 2022-09-28
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
相关资源
最近更新 更多