Capistrano Symlinks被缓存?

Jer*_*ris 12 php symlink capistrano

我一直在CentOS 6上使用Capistrano建立PHP部署,并遇到了一个有趣的问题.capistrano工作的方式,它设置这样的文件夹:

  • /var/www/myapp.com/
    • current(符号链接到/ release中的最新版本)
    • 共享
    • 发布
      • 20130826172737
      • 20130826172114

当我查看"当前"符号链接时,它指向最新版本.首先,在打开我的网络应用程序时,一切正常.部署新版本后,当前文件夹正确指向新版本,但Web应用程序尝试从旧版本(已在Capistrano清理过程中删除)中加载文件.此外,虚拟主机配置为指向/var/www/myapp.com/current/Public.

符号链接是否以任何方式缓存?

失败的特定PHP代码(初始化我的框架)是这样的:

require_once dirname(dirname(__FILE__)) . '/App/App.php';
App\App::run();
Run Code Online (Sandbox Code Playgroud)

这是在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/share/php ')/var/www/myapp.com/releases/20130826172237/Public/index.php

而当前的符号链接显示:

当前 - >/var/www/zverse/releases/20130826172641

显然是20130826172641!= 20130826172237,后者是以前的版本.

我能看到的任何想法或领域?

pti*_*tim 4

我无法验证这一点,但 Apache 跟踪/缓存符号链接的旧位置似乎存在一些不可预测的行为:

唯一能绝对解决这个问题的方法是循环 Apache,我们不希望在每次部署时都这样做。——迈克·布里顿

他建议移动整个目录,而不是更新符号链接。

  • 感谢您的信息。我仍然经常遇到这个问题,但我在 Capistrano 部署过程中执行了“service httpd restart”,这似乎解决了这个问题。 (2认同)