Я использую lftp для развертывания веб-сайта через Travis CI. Перед развертыванием выполняется процесс сборки, по этой причине каталог сборки присутствует и помещается в корень ftp-сервера.

lftp $FTP_URL -e "glob -d mirror build . --reverse --delete-first --parallel=10 && exit"

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


Моим первым подходом была возможность установить временный каталог, но на странице руководства lftp говорится, что есть только параметры для временных файлов. Я все еще пробовал этот вариант, но это не помогло.


Мой второй подход заключался в том, чтобы использовать «временную папку для сборки зеркала», а затем заменить ею корень. Проблема здесь в том, что я не могу исключить временную папку при удалении старых файлов и папок, таких как rm -rf *.

1
redaxmedia 26 Ноя 2016 в 06:32

2 ответа

Лучший ответ

В заключение,

Я написал крошечный плагин Grunt, который довольно хорошо справляется с операциями lftp и помогает обрабатывать файлы и каталоги. .

Это шаблон с нулевым центром города - каждый заполнитель будет автоматически заменен:

command:
[
    'mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first',
    'mv {TARGET} {TARGET}-old-{TIMESTAMP}',
    'mv {TARGET}-new-{TIMESTAMP} {TARGET}',
    'rm -rf {TARGET}-old-{TIMESTAMP}',
    'exit'
]

Это будет команда Vanilla lftp - не забудьте вручную заменить каждый заполнитель:

lftp $FTP_URL -e "mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first; mv {TARGET} {TARGET}-old-{TIMESTAMP}; mv {TARGET}-new-{TIMESTAMP} {TARGET}; rm -rf {TARGET}-old-{TIMESTAMP}; exit"
0
redaxmedia 28 Сен 2018 в 08:15

Для небольших изменений, не связанных с добавлением / удалением файлов php, должно быть достаточно set xfer:use-temp-file. Также не используйте --remove-first, поскольку это заставляет lftp удалять устаревшие файлы перед загрузкой.

Для больших изменений я бы создал отдельный каталог для каждой версии сайта и перенаправлял веб-сервер в этот каталог, используя .htaccess mod_rewrite или другой файл конфигурации. Этот метод позволит атомарно переключиться на новую версию (и обратно при необходимости). Кроме того, вы сможете провести финальное предпроизводственное тестирование новой версии, если вы будете перенаправлены на новую версию условно на основе вашего IP-адреса или с помощью другого правила.

Если вы не хотите повторно загружать весь сайт для каждой новой версии, а FTP-сервер поддерживает FXP с самим собой, то вы можете скопировать старую версию в новый каталог с помощью mirror old_directory ftp://user@example.com/new_directory, а затем обновить новый каталог с помощью mirror -eR local_dir new_directory.

2
lav 28 Ноя 2016 в 09:12