为什么我必须删除当前版本和版本才能使 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
我使用 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