我们使用Capistrano的采用类似的设置。然而,我们遇到了一些问题:
切换到设置后,事情似乎很好,但后来我们开始注意到,在运行cap deploy
后,即使符号链接已被更改为指向头部即使经过多次刷新并附加了不同的GET参数,浏览器仍然会显示旧页面。首先,我们认为它是浏览器缓存,所以对于开发,我们通过HTTP头禁用了浏览器缓存,但是这并没有改变任何东西。然后我检查了一下,以确保我们没有进行整页缓存服务器端,而我们没有。但是我注意到,如果我删除了符号链接指向的修订版本中的文件,我们将得到一个404,所以Apache提供了新的页面,但它仍然遵循“旧符号链接”并从上面提供页面错误的目录。
这是共享主机,所以我无法重新启动Apache。所以我尝试删除符号链接并每次创建一个新的。这似乎工作有时,但不可靠。它大概有25〜50%的时间。
最后,我发现,如果I:
- 除去现有符号链接(其删除或重命名它);
- 提出页面请求,从而导致Apache将试图解析符号链接,但发现它失踪(导致404)
- 然后创建一个新的符号链接到新目录
它会导致文档根目录到大部分时间都会更新。但是,即使这不是完美的,大约有2-5%的时间,当部署脚本运行wget
在重命名旧符号链接后立即获取页面时,它将返回旧页面而不是404页面。
Apache似乎在缓存文件系统,或者当Apache从磁盘上的文件系统读取时(也许没有任何意义),mv
命令可能只改变了内存中的文件系统。在任何情况下,我已经采取了别人的建议,运行符号链接更改后sync
,它应该得到的文件系统上的磁盘同步记忆,也许是轻微的延迟也将有助于wget
返回一个404
我'm thinking“rm/var/www/html/finalbuild && ln -s/home/user/build4/var/www/html/finalbuild”。您甚至可能不需要重新启动Apache。 – barrycarter 2010-06-02 17:16:19
谢谢,我已经改变了docroot,并指出它是一个符号链接,但Apache似乎没有听...我已经成功地重新启动了Apache,任何想法? – Jorre 2010-06-03 09:35:43
我也一直在试图为此找到答案。 Apache只是给了我一个403错误。到目前为止没有运气。推测是因为在生产中这样做是不好的做法。只是想在我的开发盒上做到这一点。 – nedned 2010-09-22 05:39:34