首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将apache documentRoot设置为符号链接(为了便于部署)

问将apache documentRoot设置为符号链接(为了便于部署)
EN

Stack Overflow用户
提问于 2010-06-01 21:34:46
回答 2查看 10.3K关注 0票数 11

我们正在寻找一种将Apache DocumentRoot指向符号链接的方法。例如DocumentRoot /var/www/html/finalbuild

finalbuild应该指向/home/user/build3 3这样的文件夹。

当我们将一个新构建移动到/home/user/ build 4时,我们希望使用一个shell脚本,该脚本将符号链接"finalebuild“更改为这个新目录/home/user/build 4,并进行apache优雅的重新启动,使一个新的web应用程序版本启动和运行时风险很小。

创建此符号链接并在使用shell脚本之后更改该链接的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-01-12 06:22:43

我们用卡皮斯特拉诺来使用类似的装置。然而,我们遇到了一些问题:

切换到安装之后,事情似乎进展顺利,但是我们开始注意到,在运行cap deploy之后,即使符号链接被更改为指向头版本,浏览器仍然会显示旧页面,即使经过多次刷新和附加不同的GET参数。

起初,我们认为这是浏览器缓存,所以在开发中,我们通过HTTP头禁用了浏览器缓存,但这并没有改变任何事情。然后我检查了一下,以确保我们没有做全页缓存服务器端,但是我注意到,如果我删除了符号链接所指向的修订版中的一个文件,我们就会得到404,所以Apache提供了新的页面,但是它仍然遵循“旧符号链接”,并从错误的目录中为页面提供服务。

这是在共享主机上,所以我无法重新启动Apache。所以我试着删除符号链接,每次创建一个新的链接。这似乎有时起作用,但不可靠。它可能在25%~50%的时间内起作用。

最后,我发现如果我:

  1. 删除现有的符号链接(删除或重命名它);
  2. 发出页面请求,导致Apache试图解析符号链接,但发现它丢失了(结果是404)
  3. 然后创建到新目录的新符号链接。

它将使docroot大部分时间都被正确地更新。但是,即使这样也不完美,而且大约有2-5%的时间,当部署脚本在重命名旧符号链接后立即运行wget来获取页面时,它将返回旧页而不是404。

看起来,Apache不是在缓存文件系统,就是在Apache从磁盘上的文件系统读取时,mv命令只改变了内存中的文件系统(实际上没有任何意义)。在这两种情况下,我都建议在符号链接更改后运行sync,这将使磁盘上的文件系统与内存保持同步,也许轻微的延迟也会帮助wget返回404。

票数 8
EN

Stack Overflow用户

发布于 2010-11-17 01:54:07

我在生产中使用过符号链接作为,不需要优雅地重新启动。一般来说,这个想法应该可行。403错误可能表示与符号链接更改无关的权限错误。您想要添加的一个额外的皱纹是使符号开关原子化,因此符号链接始终存在。也就是说,在任何时候,符号联系都是不存在的,哪怕是一瞬间。

这个问题的解决方案是通过创建一个新的符号链接,然后在旧的符号链接上重命名它来实现更改。在类似Unix的系统上,重命名是一种原子操作,因此符号“change”也是原子的。手工操作的过程如下:

代码语言:javascript
复制
$ ln -s new current_tmp && mv -Tf current_tmp current
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2953517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档