【问题标题】:Php files not getting updated after deploy even after clearing xcache即使在清除 xcache 后,php 文件在部署后也没有得到更新
【发布时间】:2014-05-06 06:05:08
【问题描述】:

面对这个奇怪的问题,如果我部署我的代码,甚至清除 xcache,那么代码也会调用一些旧文件。这种行为是随机的。我检查了 xcache ,它每次都变得清晰,但有时它仍然可以正常工作,然后再次尝试访问旧文件以及一些如何正常工作。这个问题不在于 js 或 css,因为我们为它们维护版本,但它是在 php 类和函数的情况下。

我根本没有从网络上得到任何想法,或者为什么会发生这种情况。我也尝试过触摸所有文件,但即使频率更高,也存在同样的问题。 我正在使用带有 xcache 的 LAMP 环境并通过 capistrano 部署版本。我从其管理员那里验证了 xcache clear。 尝试了不同版本的 xcache 但没有帮助。

可能是这种情况,但我也没有解决方案: 如果我们的请求处理时间很长,我们会在两者之间部署和符号链接更改,并且如果此请求包含另一个文件,则新旧文件都会被包含在内,从而导致问题。

请建议我可以进一步移动的地方。

【问题讨论】:

  • 您是否尝试使用其他类型的 FTP 服务上传文件?
  • 你试过重启 WebServer 吗?
  • 重启网络服务器解决了这个问题,但是每次部署都不能重启服务器。
  • 您是否将 PHP 作为模块运行?或者你在使用一些 CGI 发行版,比如 mod_fcgi 或 mod_ruid2 / suPHP 等?也许 xcache 共享内存部分仅在一个 cgi-php-linux 进程中更新,并且由于某种原因您的其他进程认为不需要更新?
  • 您想发布操作系统版本,您是否在 vbox 等虚拟机上运行它?

标签: php apache capistrano symlink xcache


【解决方案1】:

当您更改文件正在使用时,您一定会遇到问题。

您需要在切换符号链接之前完全停止应用程序。

在 Capistrano 社区中,这称为“维护模式”。您可以(在 Google 上)找到很多关于实施此概念的信息。

基本上,您将您的应用程序设置为“维护模式”,这将导致它在没有到达 PHP 的情况下阻止(网络)请求并停止任何长时间运行的进程(crons、守护进程等)。如何实现这在很大程度上取决于您的应用程序架构。

当应用程序完全空闲时,可以安全地切换符号链接,然后清除缓存,然后重新启动。

【讨论】:

  • 我在从 CLI 和 cURL 执行的脚本中使用 xcache_clear_cache()。正如我在问题中提到的,是以下导致问题的案例:如果我们的请求处理时间很长,我们会在两者之间部署和符号链接更改,如果此请求包含另一个文件,那么旧文件和新文件都会被包含在内,从而导致问题。跨度>
  • 因为您已经在使用 CLI web (cURL),所以我之前的回答没有任何意义。我已经重写了它以解决您在评论中强调的真正问题。
猜你喜欢
  • 2022-07-14
  • 2021-07-25
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
相关资源
最近更新 更多