为什么我必须删除当前版本和版本才能使 Capistrano 在 nginx 上工作?

Why have I to delete current and releases to make Capistrano work on nginx?

我使用 Capistrano 3 及其插件 capistrano/symfony 在网络服务器上部署我的 Symfony 应用程序。本服务器使用 Debian 8 下的 Nginx。

当我 运行 cap prod deploy 时,脚本有效。我可以在 /var/www/myapp/releases 上看到我的新版本。 /var/www/myapp/current 是一个符号 link,指向我的最新版本。

但是当我访问我的应用程序时,它仍然提供旧版本。我尝试重启nginx,问题依旧。

我发现的唯一 "solution" 是在 运行 部署 Capistrano 之前删除 /var/www/myapp/current 和 /var/www/myapp/releases。

您知道它的来源吗?

这通常不是 nginx 问题,而是 PHP 缓存(opcache、realpath 等)。因此,您可以手动删除旧文件夹(无聊),编写 clear-all-php-caches 脚本(结果可能会有所不同)或将 php 重新启动任务添加到 Capistrano 3 部署过程中(我的 CentOS 7 示例php-fpm):

namespace :deploy do
...
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
        sudo 'service php-fpm restart'
    end
  end
...
end