Как загрузить основной файл PHP через FTP, не отвлекая посетителя на ваш сайт?

Всякий раз, когда активный сайт на основе PHP, за которым я присматриваю, нуждается в срочном изменении кода, я изменяю код в автономном режиме, тестирую его на своем локальном сервере, а затем, когда доволен, загружаю обновленный файл на рабочий сервер через FTP.

Это, очевидно, работает, но я обнаружил, что когда я делаю это на загруженном сайте, если кто-то обращается к файлу в своем браузере в то же самое время, когда я загружаю, он получит ошибку синтаксического анализа PHP. Я предполагаю, что это потому, что загрузка через FTP не завершена в тот момент, когда они пытаются получить к нему доступ.

Я не могу дождаться тихого периода, чтобы загрузить мои новые файлы, так как сайт занят 24/7, так как я могу избежать этого? Некоторые серверы FTP обрабатывают это лучше, чем другие, или я собираюсь развернуть на производственном сервере неправильно?

CENTOS 6.6, Apache, ProFTPd / PureFTPd, PHP 5.3

3

Решение

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

Например, у вас есть хост apache / nginx, настроенный на

/var/awesome-app/public_html

Храните ваше приложение в другом месте, например твой дом реж. Загрузите вашу заявку в отдельный релиз каталог, как это:

~/awesome-app/releases/1
~/awesome-app/releases/2
~/awesome-app/releases/3
...
~/awesome-app/releases/<RELEASE_NUMBER>

Создайте символическую ссылку из вашего приложения на путь, на который указывает хост. Эта команда должна вызываться один раз — при настройке среды:

ln -s ~/awesome-app/current /var/awesome-app/public_html

После загрузки приложения создайте (замените) символическую ссылку на текущий выпуск. Эта команда должна вызываться с каждым выпуском.

ln -sf ~/awesome-app/releases/4 ~/awesome-app/current

Вы можете также посмотреть на Развертывание программного обеспечения.

1

Другие решения

Вы можете создать два бэкенда (копии, например, nginx upstream) приложения и обновить его отдельно (с отключением текущего обновленного бэкенда).

0

По вопросам рекламы [email protected]