【发布时间】:2013-08-29 07:03:15
【问题描述】:
我一直在 CentOS 6 上使用 Capistrano 设置 PHP 部署,并遇到了一个有趣的问题。 capistrano 的工作方式是这样设置文件夹:
- /var/www/myapp.com/
- 当前(/releases 中最新版本的符号链接)
- 共享
- 发布
- 20130826172737
- 20130826172114
当我查看“当前”符号链接时,它指向的是最新版本。起初,打开我的网络应用程序时,一切正常。部署新版本后,current 文件夹正确指向新版本,但 Web 应用程序尝试从旧版本(已在 Capistrano 清理过程中删除)加载文件。此外,虚拟主机配置为指向 /var/www/myapp.com/current/Public。
符号链接是否以任何方式缓存?
失败的特定 PHP 代码(初始化我的框架)是这样的:
require_once dirname(dirname(__FILE__)) . '/App/App.php';
App\App::run();
位于 index.php 中,当前位于 /var/www/app.com/current/Public/index.php。
我的 Apache 错误日志显示:
PHP 致命错误:require_once(): 无法打开所需的 '/var/www/myapp.com/releases/20130826172237/App/App.php' (include_path='.:/usr/share/pear:/usr/共享/php')在/var/www/myapp.com/releases/20130826172237/Public/index.php
当前符号链接显示:
当前 -> /var/www/zverse/releases/20130826172641
显然 20130826172641 != 20130826172237 后者是以前的版本。
任何想法或领域我可以看看?
【问题讨论】:
-
似乎是个小问题。我等了大约 10 分钟,然后又试了一次,它奏效了。我想知道这是否是某种 Apache 优化?
-
禁用 PHP 的真实路径缓存或使用mod_realdoc,此问题将消失,无需重新启动服务器。
-
与 Centos 上的 nginx 服务器相同的问题,“当前”符号链接不会更新到最新的。
标签: php capistrano symlink