【问题标题】:Web.py - prevent caching of code/outputWeb.py - 防止缓存代码/输出
【发布时间】:2015-08-22 09:25:25
【问题描述】:

这个问题令人费解,因为行为非常不一致。

我正在学习为 Web.py 框架编写应用程序。例如,我有以下结构:

web_app/
 |-- main.py
 |-- api_calls
 |    |-- __init__.py
 |    |-- test1.py
 |    |-- test2.py
 \----\-- common.py

我调用spawn-fcgi 启动我的网络应用程序如下:spawn-fcgi -s /run/webapp.sock -U http -G http /srv/http/web_app/main.py

现在,由于我仍在学习如何以这种方式编写 Web 应用程序,因此我经常更新代码。我在common.py 中有一些函数,所有“API 文件”都可能调用它们,所以它们是import common。简而言之,我期望工作的所有导入逻辑实际上都工作。

问题是,如果我更改一段代码,无论是 Web 服务器、fcgi 进程还是 Python 本身,检测到此更改并通过执行新代码来响应,这似乎是高度不一致的。例如。如果我在common.py 中进行更改,那么其他调用它的文件仍然引用旧代码。但是,如果我对 test1.pymain.py 进行更改,那么这些更改可能会在页面重新加载时立即出现。但是,即使这似乎也不一致 - 有时它不起作用。

我发现touching 所有 .py 文件有时会强制服务器更新,但并非总是如此。

似乎让新代码始终如一地运行的唯一可靠方法是:

  1. 杀死 spawn-fcgi 程序启动的 Python 进程
  2. 触摸所有 .py 文件
  3. 删除所有 .pyc 文件
  4. 重新启动 spawn-fcgi 守护进程。

我的问题有两个:有人能解释一下 Python、web.py、spawn-fcgi 和 nginx 的组合如何处理代码和页面响应缓存吗?其次,我指定的唯一可靠方法是确保当我刷新网页以查看我的更改时,我对代码所做的任何更改都会被注意到? (现在我手动执行ps 来查找正确的Python 进程,因为我有其他Python 守护进程正在运行,然后使用find 触摸.py 并删除.pyc 文件,然后手动重新进入spawn-我在上面指出的 fcgi 命令 - 当我可能只更改了一行代码时,这是一个乏味的过程......)

【问题讨论】:

    标签: python caching nginx fastcgi


    【解决方案1】:

    我最终不得不编写一个小脚本别名来手动终止 fcgi 进程、删除 .pyc 文件并重新启动 fcgi 进程。它有效,但它肯定不优雅......

    alias newcode='kill `cat /run/fcgi-api.pid` ; sleep 0.5 && rm -f /mnt/data/www/api/*.pyc /run/fcgi-api.sock && spawn-fcgi -P /run/fcgi-api.pid -U http -G http -s /run/fcgi-api.sock /mnt/data/www/api/api.py'
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题! web.py 给出了旧代码的缓存结果。我必须使用apache2ctl restart 重新启动 Apache 以防止这种情况发生。

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        • 2018-02-16
        • 2011-02-20
        相关资源
        最近更新 更多