文件上传后的Django动作

时间:2010-11-12 15:25:10

标签: django file-upload rsync delay

我们拥有广泛的现有代码库,现在我们已经添加了具有单个主服务器的负载平衡服务器。有各种应用程序包含上传文件和图像的模型,这些都可以正常工作......但是,这引发了rsync延迟的明显问题。 Rsync位于crontab中并设置为每分钟运行一次,但这仍然意味着在创建的内容和实际存在于Web服务器上的内容之间可能存在59秒的等待。

我想要的是能够注册某种“post file changed”处理程序,只要上传新文件就会触发rsync。虽然我找不到任何类似的东西! Django有文件上传处理程序,但这些似乎只处理实际的上传流,而不是文件,因为它随后被保存到文件系统。

我能看到的最好的方法是创建FileField,FieldFile,ImageField和ImageFieldFile的简单扩展,作为我项目的一部分,并挂钩到FileField中的save和delete方法。基本上,要添加此行为来创建自定义文件和图像字段。这不是很复杂,但它似乎不是我最优雅的解决方案。我需要向南方讲授我的新领域,更新受影响的每个模型,然后创建大量的南方迁移(我非常肯定会与我们待定的一些代码发生冲突)。

我也在考虑为该项目创建一个自定义存储类,但我很担心这对其他代码片段产生了深远的影响。

我无法相信之前没有人遇到过这个问题,是否有规范方法?

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果你想从服务器端解决这个问题(比如rsync的类似解决方案)并且你正在运行Linux,你可能想看一下lsyncd:

http://code.google.com/p/lsyncd/

lsyncd在Linux内核中使用inotify来监视目录,并在修改文件后立即调用rsync。相当简单。