微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置apache documentRoot为符号链接便于部署

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

finalbuild应该指向一个像/ home / user / build3这样的文件

当我们把一个新的版本移动到/ home / user / build4时,我们想要使用一个shell脚本来改变符号链接“finalebuild”到这个新的目录/ home / user / build4,并且做一个apache平稳的重启来创build一个新的web应用程序版本运行风险很小。

什么是最好的方式来创build这个符号链接,并改变这个链接后使用shell脚本?

Windows:如何将驱动器符号链接到另一个驱动器?

从linux内核使用lstat / stat?

Boost :: filesystem :: is_empty()为符号链接返回false

如何从Linux上的符号链接执行脚本时find正在运行的脚本的文件

我可以用Windows中的XAMPP符号链接到networking驱动器吗?

查找符号链接到某个目录或其某个子目录

如何将常规文件转换为Linux上的符号链接

通过自动脚本重新格式化Windows lnk文件

Windows上readlink的本机替代方法

如何为linux web服务器创build符号链接

我们正在使用capistrano来采用类似的设置。 但是,我们遇到了一些问题:

切换到设置后,事情似乎没有问题,但是我们开始注意到,在运行cap deploy ,即使符号链接已经被改为指向head版本,浏览器仍然会显示旧的页面,即使在多次刷新并附加不同的GET参数。

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

这是共享主机,所以我无法重新启动Apache。 所以我尝试删除符号链接,并创建一个新的每一次。 这似乎有时工作,但不可靠。 它大概有25〜50%的时间。

最终,我发现如果我:

删除现有的符号链接删除重命名);

发出一个页面请求,导致Apache尝试解析符号链接,但发现它丢失(导致404

然后创建一个新的符号链接到新的目录

这会导致文件根本大部分时间被更新。 然而,即使这并不完美,大约有2-5%的时间,当部署脚本在重命名旧的符号链接后立即运行wget来获取页面时,它将返回旧页面而不是404

看起来Apache就是在缓存文件系统,或者当Apache从磁盘上的文件系统读取数据时, mv命令可能只是改变了内存中的文件系统(没有任何意义)。 在任何一种情况下,我都会建议在符号链接更改之后运行sync ,这应该使磁盘上的文件系统与内存同步,也许稍微的延迟也会帮助wget返回404

我使用符号链接作为生产中的apache DocumentRoot,而不需要进行正常的重新启动。 一般来说,这个想法应该起作用。 403错误可能表示与符号链接更改无关的权限错误。 你想添加一个额外的皱纹是使符号链接开关原子,所以符号链接始终存在。 也就是说,在任何时候都不存在这样的符号链接,即使是暂时的:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐