本地开发(调用python <script>,端口8888)提供过时的文件</script>

时间:2013-02-12 03:22:42

标签: python fastcgi ubuntu-12.10

我在运行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

两者仍然导致'陈旧'文件被送达。

2 个答案:

答案 0 :(得分:1)

是的,因此Python在Web服务器上运行时是一种编译语言。它正在输出一个.pyc文件,它是已编译的版本。您的目标是告诉Web服务器.pyc文件已过期且不再有效。

您有几个选择:

  1. 删除相关的.pyc文件
  2. 对于web.py,请使用重新加载器中间件
  3. 发送一个HUP信号(我很懒,通常做killall -SIGHUP python)。您可以使用看门狗(感谢barracel)等文件观看工具自动执行此操作。
  4. web.config.debug = True应该是应用程序中的默认值
  5. 这些选项都不适合你吗?

答案 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'然后&lt; \ tab&gt;来自动完成)这是我的别名到重启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 ......你会在墙上撞到墙一个星期习惯它,然后再也不想再触摸鼠标了。