0

有没有人有一个很棒的系统或任何想法,可以按照标题所说的那样做?

我想将 Web 应用程序的生产版本(用 PHP 编写并由 Apache 提供服务)从 1234 版切换到 1235 版,但在此之前,所有文件都已经在操作码缓存 (APC) 中。然后在切换之后,从版本 1234 中删除文件的旧缓存条目。

据我所知,有三种简单的方法可以原子地从一个版本切换到下一个版本。

  1. 有一个符号链接,例如 /live,它始终是文档根目录,但更改为从一个版本指向下一个版本。
  2. 同样,有一个目录/live 始终是文档根目录,但使用

    mv live oldversion && mv newversion live

    切换到新版本。

  3. 编辑 apache 配置以将文档根目录更改为 newversion,然后重新启动 apache。

我认为最好不要做 3,但无论如何我都想不出预编译所有 php 文件并使用 1 或 2 来切换版本。

那么有人可以说服我可以依赖选项 3,或者告诉我如何使用 1 或 2,或者透露一些我没有想到的其他选项吗?

4

2 回答 2

1

然后在切换之后,从版本 1234 中删除文件的旧缓存条目。

您只能清除整个缓存或根本不清除。这不是一个选择性的过程。这可能会改变您解决问题的方法。如果预编译是最重要的,您可能会在切换期间被迫关闭服务器。

于 2010-05-14T16:12:32.860 回答
1

你到底为什么要这样做?

当我切换到新版本时,我只是停止我的 Apache,通过从我的 VCS 中签出替换服务器上的 PHP 文件并重新启动 Apache。完成此操作通常需要不到 30 秒的时间,甚至可以编写脚本。所有这些都是在用户很少或没有用户的时候执行的。在那之后,操作码缓存是空的,一旦有人使用这些文件就会自己填满。

也许前几个命中不会有最佳性能,但这不应该那么糟糕。在我的生产系统上,没有人注意到这种短暂的性能下降。其中有一些非常重的系统。

您甚至可以在替换文件时在服务器上放置一个简单的“正在升级……很快回来”屏幕,以避免给用户带来任何令人不安的错误消息。

于 2010-05-14T16:21:08.143 回答