Мы используем capistrano для использования аналогичной установки. Однако мы столкнулись с несколькими проблемами:
После перехода к настройкам все шло нормально, но затем мы заметили, что после запуска cap deploy
, хотя символическая ссылка была изменена, чтобы указывать на ревизию заголовка, браузер по-прежнему отображал старые страницы. даже после нескольких обновлений и добавления различных параметров GET.
Сначала мы думали, что это кэширование браузера, поэтому для разработки мы отключили кэширование браузера через заголовки HTTP, но это ничего не изменило. Затем я проверил, чтобы убедиться, что мы не выполняем полностраничное кэширование на стороне сервера, и мы этого не сделали. Но затем я заметил, что если я удалю файл в ревизии, на которую ссылалась символическая ссылка, мы получим 404, так что Apache обслуживает новые страницы, но он все еще следовал «старой символической ссылке» и обслуживал страницы от неправильный каталог.
Это на виртуальном хостинге, поэтому я не смог перезапустить Apache. Поэтому я попытался удалить символическую ссылку и каждый раз создавать новую. Казалось, это работает иногда , но не надежно. Это работало, вероятно, 25 ~ 50% времени.
В конце концов я обнаружил, что если я:
- удалил существующую символическую ссылку (удалив ее или переименовав);
- сделал запрос страницы, в результате чего Apache попытался разрешить символическую ссылку, но обнаружил, что она отсутствует (в результате 404)
- затем создал новую символическую ссылку на новый каталог
Это может привести к корректному обновлению документа в большинстве случаев. Однако даже это не идеально, и примерно в 2-5% случаев, когда сценарий развертывания запускает wget
для извлечения страницы сразу после переименования старой символической ссылки, он возвращает старую страницу, а не 404.
Похоже, что Apache либо кэширует файловую систему, либо, возможно, команда mv
изменила файловую систему только в памяти, когда Apache считывал из файловой системы на диске (на самом деле не имеет никакого смысла). В любом случае я принял чью-то рекомендацию запустить sync
после изменения символической ссылки, что должно синхронизировать файловую систему на диске с памятью, и, возможно, небольшая задержка также поможет wget
вернуть 404.