Почему мне нужно удалять текущие и выпуски, чтобы Capistrano работала на nginx?

Я использую Capistrano 3 и его плагин capistrano / symfony для развертывания моего приложения Symfony на веб-сервере. Этот сервер использует Nginx под Debian 8.

Когда я запускаю cap prod deploy, скрипт работает. Я вижу свой новый выпуск на / var / www / myapp / Release. / var / www / myapp / current - это символическая ссылка, указывающая на мой последний выпуск.

Но когда я получаю доступ к своему приложению, оно по-прежнему обслуживает старую версию. Я попытался перезапустить nginx, но проблема не исчезла.

Единственное «решение», которое я нашел, - это удалить / var / www / myapp / current и / var / www / myapp / Release перед запуском развертывания Capistrano.

Вы знаете, откуда это может взяться?


person maxime    schedule 23.02.2016    source источник
comment
Что произойдет, если вы выполните запуск и остановку nginx вместо перезапуска?   -  person will_in_wi    schedule 23.02.2016


Ответы (1)


Обычно это не проблема 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
person Aleksey Deryagin    schedule 23.02.2016
comment
Перезапуск модуля php-fpm в конце деплоя решил проблему! Кажется, что у модулей кеширования есть привычка хранить жесткую ссылку, поэтому они не обновляют реальный путь к текущей символической ссылке. Полезно знать, спасибо! - person maxime; 24.02.2016