当我触摸 wsgi 脚本时,带有 mod_wsgi 的烧瓶应用程序不会重新加载

Posted

技术标签:

【中文标题】当我触摸 wsgi 脚本时,带有 mod_wsgi 的烧瓶应用程序不会重新加载【英文标题】:Flask application with mod_wsgi not reloading when I touch wsgi script 【发布时间】:2015-03-08 10:42:23 【问题描述】:

我正在使用 mod_wsgi 运行带有 apache 的烧瓶应用程序。在对 python 代码进行更改后,我无法重新加载应用程序,因此我通读了mod_wsgi wiki 重新加载源代码。我运行脚本以确认我在守护程序模式下运行,并且我的 .conf VirtualHost 设置如下:

<VirtualHost *:80>
    ServerAdmin admin@succor.co
    ServerName dev.succor.co
    DocumentRoot /var/www/study_buddy_dev/study_buddy

    WSGIScriptAlias / /var/www/study_buddy_dev/study_buddy/app.wsgi

    ErrorLog $APACHE_LOG_DIR/error.log
    LogLevel info
    CustomLog $APACHE_LOG_DIR/access.log combined

    <Directory /var/www/study_buddy_dev/study_buddy/>
        AuthType Basic
        AuthName "Authentication Required"
        AuthUserFile "/etc/htpasswd/.htpasswd"
        Require valid-user

        WSGIScriptReloading On
        Order deny,allow
        Allow from all
    </Directory>

    WSGIDaemonProcess succor.dev processes=2 threads=15 display-name=%GROUP
    WSGIProcessGroup succor.dev
</VirtualHost>

但是当我运行~$ sudo touch app.wsgi 时,我的应用程序没有任何变化,我完全不知道为什么。谁能解释一下我在这里做错了什么?

【问题讨论】:

当您发出touch 时不会发生重新加载,它会在收到请求后发生。您是否尝试在触摸脚本后发送请求? 我尝试在浏览器中访问该应用程序,但在我更新代码之前没有任何变化...该浏览器访问算作请求吗? 我猜这取决于您对应用程序所做的更改。如果您重新启动 Apache,您会发现有什么不同吗? 我在重新启动 Apache 时看不到任何变化。我对 Python 代码和一些 html 代码都进行了更改,但都没有传播。 那么显然问题出在其他地方,对吧?重新启动 Apache 会杀死并重新启动所有进程。如果这没有为您提供更新的应用程序,那么在我看来,您的配置指向您的应用程序的过时版本。 【参考方案1】:

我们已经在上面的cmets中解决了这个问题,但是为了其他人的利益,这里是这个问题的解决方案:

我的猜测是 Apache 运行的 Python 文件不是您正在编辑的 Python 文件,您可能安装了两组文件。但这只是一种猜测,可以解释您所看到的行为,

【讨论】:

以上是关于当我触摸 wsgi 脚本时,带有 mod_wsgi 的烧瓶应用程序不会重新加载的主要内容,如果未能解决你的问题,请参考以下文章

带有mod_wsgi的flask-restless无法连接到MySQL服务器

安装 mod_wsgi 时如何修复错误消息?

mod_wsgi 无法连接 WSGI 守护进程

分析在 Mod_wsgi 上运行的 Python 脚本

Django,apache,mod_wsgi - 错误:脚本头过早结束

我该如何解决这个问题? mod_wsgi (pid=3445): 目标 WSGI 脚本 '/www/folder/index.py' 不能作为 Python 模块加载