Назад | Перейти на главную страницу

Как получить доступ к исходным файлам до обновления символической ссылки, которые с тех пор были перемещены в другой каталог

У нас есть веб-сайт, и наш процесс развертывания выглядит примерно так (за исключением множества нерелевантных шагов)

echo "Remove previous, if it exists, we don't need that anymore"
rm -rf /home/[XXX]/php_code/previous

echo "Create the current dir if it doesn't exist (just in case this is the first deploy to this server)"
mkdir -p /home/[XXX]/php_code/current

echo "Create the var_www dir if it doesn't exist (just in case this is the first deploy to this server)"
mkdir -p /home/[XXX]/var_www

echo "Copy current to previous so we can use temporarily"
cp -R /home/[XXX]/php_code/current/* /home/[XXX]/php_code/previous/

echo "Atomically swap the symbolic link to use previous instead of current"
ln -s /home/[XXX]/php_code/previous /home/[XXX]/var_www/live_tmp && mv -Tf /home/[XXX]/var_www/live_tmp /home/[XXX]/var_www/live

# Rsync latest code into the current dir, code not shown here

echo "Atomically swap the symbolic link to use current instead of previous"
ln -s /home/[XXX]/php_code/current /home/[XXX]/var_www/live_tmp && mv -Tf /home/[XXX]/var_www/live_tmp /home/[XXX]/var_www/live

Проблема, с которой мы столкнулись, и с которой мы хотели бы помочь, заключается в том, что первое, что делает любая загрузка страницы веб-сайта, - это прорабатывает базовый каталог приложения и определяет его как константу (мы используем PHP). Если затем во время загрузки страницы происходит развертывание, система пытается include() файл, используя исходный полный путь, и получит новую версию этого файла. Он нам нужен, чтобы получить старый из старого каталога, который теперь перемещен, как в:

  1. Система начинает загрузку страницы и определяет SYSTEM_ROOT_PATH постоянно быть /home/[XXX]/var_www/live или с помощью PHP realpath() возможно /home/[XXX]/php_code/current.

  2. Символическая ссылка для /home/[XXX]/var_www/live получать обновления, чтобы указать на /home/[XXX]/php_code/previous вместо того /home/[XXX]/php_code/current где это было изначально.

  3. Система пытается загрузить /home/[XXX]/var_www/live/something.php и получает /home/[XXX]/php_code/current/something.php вместо того /home/[XXX]/php_code/previous/something.php

Прошу прощения, если это не очень хорошо объяснено. Я бы очень признателен за идеи о том, как обойти эту проблему, если кто-то сможет. Спасибо.

current должен быть не реальный каталог, содержащий ваши файлы, а символическая ссылка. Вот как это делает капистрано:

  1. Создайте каталог с именем текущей даты.
  2. Разверните новые файлы в этом каталоге.
  3. Изменить current символическая ссылка, указывающая на новый каталог.
  4. Удалите все старые ненужные каталоги.