Web.py - 阻止代码/输出的缓存

时间:2015-06-08 01:42:40

标签: python caching nginx fastcgi

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

我正在学习为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进行了更改,那么这些更改可能会在页面重新加载时立即显示。尽管如此,即使这似乎也不一致 - 有时候它不起作用。

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

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

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

2 个答案:

答案 0 :(得分:0)

我最终不得不编写一个小脚本别名来手动终止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'

答案 1 :(得分:0)

我有同样的问题! web.py从旧代码中提供缓存结果。我不得不重启Apache以防止apache2ctl restart发生这种情况。