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

为什么我必须删除当前版本和发布版本,才能使Capistrano在nginx上工作?,nginx,capistrano,capistrano3,capifony,Nginx,Capistrano,Capistrano3,Capifony,我使用Capistrano3及其插件Capistrano/symfony在Web服务器上部署我的symfony应用程序。此服务器使用Debian 8下的Nginx 当我运行cap prod deploy时,脚本可以工作。我可以在/var/www/myapp/releases上看到我的新版本/var/www/myapp/current是指向我的最新版本的符号链接 但当我访问我的应用程序时,它仍在为旧版本服务。我尝试重新启动nginx,但问题仍然是一样的 我找到的唯一“解决方案”是在运行Capist

我使用Capistrano3及其插件Capistrano/symfony在Web服务器上部署我的symfony应用程序。此服务器使用Debian 8下的Nginx

当我运行
cap prod deploy
时,脚本可以工作。我可以在/var/www/myapp/releases上看到我的新版本/var/www/myapp/current是指向我的最新版本的符号链接

但当我访问我的应用程序时,它仍在为旧版本服务。我尝试重新启动nginx,但问题仍然是一样的

我找到的唯一“解决方案”是在运行Capistrano部署之前删除/var/www/myapp/current和/var/www/myapp/releases


你知道它来自哪里吗?

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


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


如果启动和停止nginx而不是重新启动会发生什么?如果启动和停止nginx而不是重新启动会发生什么?在部署结束时重新启动php fpm模块解决了问题!缓存模块似乎有存储硬链接的习惯,因此它们不会将realpath刷新到当前符号链接。很高兴知道,谢谢!在部署结束时重新启动php fpm模块解决了问题!缓存模块似乎有存储硬链接的习惯,因此它们不会将realpath刷新到当前符号链接。很高兴知道,谢谢!
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