我在运行fast-cgi时遇到了类似的问题,我被告知没有办法解决它:Files being served are stale / cached ; Python as fcgi + web.py + nginx没有做自定义工作。有人告诉我使用python方法,它调用本地“web服务器”来托管python页面。
即使这样做,服务的文件也是陈旧/缓存的。如果我对文件进行编辑,保存并刷新,则python Web服务器仍在提供陈旧/缓存文件。
让它为修改后的文件提供服务的唯一方法是杀死(ctrl + c)脚本,然后重新启动......每次大约需要5秒钟,严重阻碍了我的开发工作流程。
理想情况下,下次从Web服务器请求页面时,将反映对脚本的任何更改。
修改
@Jordan:感谢您的建议。我试过#2,产生以下错误:
app = web.application(urls, globals(), web.reloader)
AttributeError: 'module' object has no attribute 'reloader'
根据此处的文档:http://webpy.org/tutorial2.en
然后我尝试了#4建议,
web.config.debug = True
两者仍然导致'陈旧'文件被送达。
答案 0 :(得分:1)
是的,因此Python在Web服务器上运行时是一种编译语言。它正在输出一个.pyc文件,它是已编译的版本。您的目标是告诉Web服务器.pyc文件已过期且不再有效。
您有几个选择:
这些选项都不适合你吗?
答案 1 :(得分:1)
可以理解的是,你想要一个简单的,设置一次,再也不用担心它,解决方案。但是你可能会使这个问题变得更加困难。
我通常为apache / modwsgi / nginx堆栈编写应用程序。如果我有缓存问题,我只是重启apache,瞧,我的python文件被重新解释。我不记得在我所有不同的盒子(mac,ubuntu,centos等)上重启apache的命令,我不应该这样做。
这就是命令行别名的用途......
python应用程序在运行之前被解释为,并且当在Web服务器上运行时,它将运行并且应该被视为无状态。这与在浏览器中运行的javascript不同,可以认为它具有状态,因为它是一个连续运行的VM。您可以在javascript运行时编辑它,这对于该语言的大多数应用程序来说可能都很好。
在python中,你通常会编写代码,运行它,如果这不起作用,你就重新开始。您不能实时编辑代码。这意味着您有意识地保存源并更改上下文以运行它。
我打赌您正在从图形IDE编辑源代码而不是像vi或emacs这样的命令行编辑器(我可能错了,我并不是说这有什么“错误”)。我只使用IDE编写iOS应用程序,我坚持ViM。为什么?因为那时我总是在命令行上,而且我没有被任何东西分散注意力(动画,鼠标指针,通知)。我写完代码后,我快速键入':wq'(写入和退出),然后快速输入'restartweb'(实际上我通常输入're'然后< \ tab>来自动完成)这是我的别名到重启apache的命令是什么。我的python被重新解释了。
我的观点是,您应该保持简单并使用别名之类的东西来解决您的问题。它可能不是你能做的最酷的事情。但这是忍者编码员在过去20年里为快速简单地完成工作所做的工作。
现在很明显我只建议了一个apache的解决方案,我之前从未使用过web.py.但同样可能的解决方案仍然适用。制作一个位于项目目录中的bash脚本,称之为 restart.bash 。其中包括:
rm -r *.pyc
将以递归方式删除所有已编译的pyc文件,强制您的应用重新加载。然后在运行该文件的〜/ .bashrc 中创建别名
类似的东西:
alias restartproject="bash /full/path/to/restart.bash"
神奇,现在您有一个适用于所有地方的解决方案,无论您选择从哪种类型的Web服务器运行您的应用程序。
修改强> 现在,您有一个适用于Windows IIS服务器的解决方案。如果你试图从Windows运行python,你可能应该Stahp! HugZ能够
我们正在使用virtualenv吗? :)我们希望保持我们的python与系统无关,这样我们就可以将它卖给任何人吧? :)如果你不使用它们,你应该真的看看ViM和emacs ......你会在墙上撞到墙一个星期习惯它,然后再也不想再触摸鼠标了。