Gulp rsync: настройка быстрого deploy сайта для Windows 10

Содержание

ubuntu — Ошибка «Permission denied (13) » при попытке отправить данные через rsync в директорию с правами доступа 777 при использовании не-root аккаунта

В данном вопросе как на локальном компьютере, так и на VPS установлены Ubuntu 20.04.

Пробую отправить файлы через rsync на VPS используя учётную запись (которая на VPS) root :

Starting rsync to [email protected]:/var/www/testapp.com...

Это небезопасно, но ради экспериментов безопасность на VPS пока настроена слабо и так будет до тех пор, пока всё не заработает при слабой безопасности. После ввода пароля для root отправка файлов происходит успешно.

Теперь пытаюсь отправить те же данные используя VPS-аккаунт с пониженными привилегиями non_root_admin. Собственно, в будущем именно этот аккаунт и будет использован, только нужно будет ещё запретить вход по паролю и перейти на аутентификацию через ассиметричное шифрование.

Starting rsync to [email protected]:/var/www/testapp.com...

После ввода пароля для non_root_admin лог такой:

16:46:38] gulp-rsync: rsync: mkstemp "/var/www/. testapp.com.Hzn8wK" failed: Permission denied (13) 
[16:46:38] gulp-rsync:  
[16:46:38] gulp-rsync:  
[16:46:38] gulp-rsync: sent 613 bytes  received 894 bytes  143.52 bytes/sec 
[16:46:38] gulp-rsync: total size is 90,232  speedup is 59.88 
[16:46:38] gulp-rsync:  
[16:46:38] gulp-rsync: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1207) [sender=3.1.3] 
[16:46:38] gulp-rsync:  
[16:46:38] 'Deploy' errored after 9.84 s
[16:46:38] Error in plugin "gulp-rsync"
Message:
    Error: rsync exited with code 23
    at ChildProcess.<anonymous> (/home/me/testapp.com/node_modules/gulp-rsync/rsync.js:121:17)

Надеюсь, что это глупая ошибка новичка (в система прав доступа в UNIX-подобных ОС) и Вы сразу поняли, в чём дело. Привожу ход своих мыслей, дабы Вы смогли понять, какие моменты потребуется разъяснить.

  • rsync: mkstemp — пытается создать новую временную директорию, но что-то идёт не так.
  • Permission denied (13)
    скорее всего означает, что не хватает прав доступа. На это косвенно указывает и то, что с аккаунтом root всё работает нормально.
  • В UNIX-подобных ОС изначально никто, кроме root не имеет права делать никакие операции с файлами и директориями?
  • Хотя это и небезопасно, я временно установил директории testapp.com права доступа 777. Так и этого не достаточно?!
  • Получается, что даже у директории права доступа 777, то в ней нельзя создавать поддиректории?!
  • ubuntu
  • vps
  • права-доступа
  • rsync

Сообщение об ошибке говорит о том, что недостаточно прав на каталог /var/www чтобы создать в нем временные файлы. Права надо дать и на /var/www. Права лучше дать через группу.

groupadd sync

Добавляем в неё пользователя:

gpasswd -a username sync

Даём права на файлы:

chgrp sync /var/www
chmod g+rwx /var/www
chgrp sync /var/www/testapp.com
chmod g+rwx /var/www/testapp.com

4

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Rsync примеры синхронизации

Потребность передачи файлов между серверами и компьютерами возникает довольно часто, особенно при администрировании нескольких устройств.

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

Для этого существуют специальные утилиты. В этой статье мы рассмотрим одну из них. А именно будет рассмотрена rsync синхронизация в linux.

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

Примечательная особенность Rsync — возможность передавать зашифрованные файлы с помощью SSH и SSL.

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

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

Возможно использование rsync для синхронизации файлов, каталогов, при этом может применяться сжатие и шифрование. Программа впервые была применена в июне 1996 года, она разработана Эндрю Тридгелом и Полом Маккеррасом.

Rsync синхронизация выполняется по протоколу RSYNC, который специально разработан не просто для передачи файлов между двумя компьютерами, а для их синхронизации. Если точнее, то передается не файл полностью, а только то, что было изменено.

Как вы уже поняли, в этой статье мы рассмотрим rsync примеры синхронизации, настройку rsync, а также ее основные возможности и опции.

Особенности Rsync

Давайте сначала рассмотрим примечательные особенности Rsync:

  • Возможность поддерживать синхронизацию целых деревьев каталогов
  • Можно сохранять символические ссылки, жесткие ссылки, владельцев и права файла, метаданные и время создания.
  • Не требует особых привилегий
  • Передача файлов одним потоком
  • Поддержка RSH, SSH в качестве транспорта
  • Поддержка анонимного Rsync

Синтаксис Rsync

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

В Ubuntu команда установки будет выглядеть вот так:

Видео: rsync — Backup and Sync Files — Linux CLI

$ sudo vi /etc/rsyncd.conf
$ sudo service rsyncd start
$ rsync -zvh file /tmp/backups/

Синхронизация папок на локальной машине

Видео: Rsync — молниеносный деплой средних и крупных проектов (gulp-rsync)

Синхронизация папок rsync выполняется так же просто, как и файлов:

$ rsync -avz documents/ [email protected]:/home/

Также само можно синхронизировать файлы с rsync из удаленного сервера:

$ rsync -avzhe ssh root@192. 168.0.101:/root/install.log /tmp/

А теперь передадим данные на тот же сервер:

$ rsync -avzhe ssh —progress /home/user/documents [email protected]:/root/documents

Синхронизация не всех файлов в rsync

Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями.

Например, скопируем все файлы, начинающиеся на букву R:

$ rsync -avz —delete [email protected]:/documents/ /tmp/documents/

Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.

Максимальный размер файлов Вы можете указать максимальный размер файлов, которые нужно синхронизировать.

Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:

$ rsync —remove-source-files -zvh backup.tar /tmp/backups/

Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.

Режим симуляции rsync

Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе.

Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:

$ rsync —bwlimit=100 -avzhe ssh /user/home/documents/ [email protected]:/root/documents/

Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:

backup.tar

Автоматическая синхронизация папок rsync

Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.

Создаем ключ:

$ ssh-keygen -t rsa

Загружаем ключ на сервер к с которым собираемся синхронизироваться:

$ crontab -e

Использование rsync

rsync — один из лучших способов быстро и без проблем развернуть код. Это также часто упускаемый из виду вариант. Давайте изменим это! Эта статья дает вам некоторое представление о том, как использовать его в целом и особенно здесь, на fortrabbit.

О rsync

rsync — это сокращение от r emote sync хронизация. Это инструмент командной строки для синхронизации файлов по сети. Это с открытым исходным кодом. Это старо, но действительно хорошо, и это до

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

Прочитать перед использованием

rsync — могучий острый меч. Используйте его осторожно. Имейте в виду, что предоставление ложных параметров или неправильного порядка может привести к потере данных. rsync работает поверх SSH, поэтому он также безопасен и очень удобен при использовании аутентификации по ключу SSH. Обычно, как и в большинстве задач, связанных с развертыванием здесь, вы будете использовать rsync с вашего локального компьютера , а не непосредственно в приложении fortrabbit.

Установка rsync

Скорее всего, он у вас уже есть: rsync встроен в Linux и macOS . Проверьте, установлен ли он. Запустите эту команду в Терминале вашего локального компьютера:

 $ rsync --версия
# Если он установлен, он выведет номер версии.
 

Для Windows 10 рекомендуется установить подсистему Linux (WSL). Для Windows 7 или даже ниже вы можете использовать cwRsync, для которого также требуется Cygwin. Есть также несколько других клонов и настольных клиентов с графическим интерфейсом. Но не бойтесь терминала, это проще, чем вы думаете.

Варианты использования

Существует несколько способов развертывания на fortrabbit: с помощью Git, с помощью SFTP и/или SSH. Вы можете подключить rsync в большинстве рабочих процессов развертывания либо в качестве улучшения, либо в качестве замены. Только это не очень хорошо работает с профессиональными приложениями, поскольку они имеют временное хранилище и не имеют прямого доступа по SSH. Это ваши основные варианты использования rsync для развертывания кода в универсальных приложениях fortrabbit:

rsync вместо SFTP

Не использовать Git и

все еще используете SFTP? Рассмотрим rsync в качестве замены. С SFTP — если ваш SFTP-клиент не имеет какого-либо метода синхронизации (который все равно будет медленнее) — вы будете копировать каждый файл вручную, один за другим. Это обыденно, а также может быть опасно, если вы забыли скопировать важные файлы. rsync может работать как улица с двусторонним движением непосредственно в файловой системе. Легко синхронизируйте файлы вверх и вниз из вашей локальной разработки в приложение.

rsync в дополнение к Git

Используете Git для развертывания? Считайте rsync важным дополнением. Почему? Ваши зависимости управляются с помощью Composer и, таким образом, исключаются из Git. Они будут установлены и управляться с помощью Composer. Таким образом, вы поддерживаете чистоту своего репозитория Git, просто включая исходные файлы своего собственного кода. Но есть еще кое-что. Ваш проект включает данные времени выполнения и статические активы:

Развертывание связанных сборок внешнего интерфейса с помощью rsync

Вероятно, вы используете какой-то процесс сборки внешнего интерфейса — инструмент сборки, такой как webpack, Brunch, Parcel, browserify, gulp.js или тому подобное. Это включает в себя компиляцию, объединение и минимизацию Javascript, SASS, LESS, стилуса и, возможно, изображений. Большинство современных инструментов сборки основаны на JavaScript и Node.js. Приложения fortrabbit не поддерживают запуск такого процесса сборки внешнего интерфейса. Поэтому мы советуем запускать процесс производственной сборки локально. Это имеет то преимущество, что вы можете оптимально отлаживать ошибки. Но вам также нужно каким-то образом скопировать эти файлы в удаленное приложение!

Вариант 1: Просто включите встроенные файлы в Git! Вы можете просто включить испорченные файлы в свой репозиторий Git и развернуть его вместе с остальным кодом.

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

Вариант 2: развертывание отдельно. В идеале такие связанные бинарные файлы следует исключить из Git. Развертывание выполняется быстрее, если репозиторий Git небольшой. И только несжатый текст можно «отличить». Изменения в этих однострочных файлах не отслеживаются. Вы можете загрузить эти файлы вручную или, что еще лучше, использовать rsync для загрузки этих пакетов.

См. также нашу старую запись в блоге «Я люблю активы» на эту тему.

Синхронизировать загруженные ресурсы с помощью rsync

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

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

СОВЕТ ПРОФЕССИОНАЛА: Для Craft CMS мы разработали Craft Copy, который, помимо других полезных функций, также включает rsync для синхронизации ресурсов.

Использование rsync

Подсел? Итак, давайте перейдем к вашему локальному терминалу:

.

Структура команды rsync

 # синхронизировать все файлы UP
#
#      параметры
# ─┴─
$ rsync -av ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
# ─┬─ ──────────────────┬───────────────── ───────
#          источник назначение
 
  • варианты : Как синхронизировать смотрите ниже.
  • источник : Это ваш локальный исходный каталог.
  • пункт назначения : Целевой URL-адрес, по которому должны располагаться файлы.

Обычное использование

Вот наиболее распространенные команды rsync. Скорее всего, вы даже придете, используя только первые два:

.
 # ВНИЗ: с удаленного на локальный
$ rsync -av {{app-name}}@deploy.{{region}}.frbit.com:~/ ./
# ВВЕРХ: от локального к удаленному
$ rsync -av ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
# LOCAL: две локальные папки
$ rsync -av ~/projects/{{имя-приложения}}/ ~/projects/{{имя-приложения}}.copy/
# ОТ УДАЛЕННОГО К УДАЛЕННОМУ: от приложения к приложению
$ rsync -av {{app-name}}@deploy.{{region}}.frbit.com:~/ {{app-name-2}}@deploy.{{region}}.frbit.com:~/
 
Удаленные пути

Удаленные URL-адреса состоят из {{user}}@{{host}}:{{folder}} . В приведенных здесь примерах используются заполнители приложений fortrabbit.

Локальные пути

rsync поддерживает все способы определения локальных путей. ./ переведет в текущий каталог. Вы также можете использовать абсолютные пути, например /home/your-user/projects/{{app-name}} , или относительные пути, например . ./{{app-name}} .

Опции

Вот некоторые общие параметры для изменения режима синхронизации:

.
Опция Описание
Сокращение для --archive , как набор опций: -rlptgoD .
Подробный вывод показывает все переданные файлы и статистические данные. Увеличьте уровень детализации, используя -vv или -vvv
Сокращение для -- пробный запуск . См. ниже.
Рекурсивный, поэтому все файлы и каталоги находятся ниже исходного каталога.
Сохраняйте символические ссылки.
-п Разрешения будут синхронизированы.
Сохранить время модификации.
Установить группу файлов/папок Unix в месте назначения для группы в источнике. Также: используйте группу в качестве критерия проверки
Установить группу файлов/папок Unix в месте назначения для группы в источнике. Также: использовать группу в качестве критерия проверки
Вместо времени модификации и размера использовать контрольную сумму содержимого файла. Используйте с осторожностью, если время модификации в пункте назначения не является достоверным.
Сокращение для --cvs-exclude . Исключить файлы контроля версий, такие как .git , .hg , .svn .
Удобочитаемый вывод: отображать размеры байтов в МиБ, ГиБ вместо простых байтов.
--удалить Удалить неиспользуемые файлы. См. ниже
-- исключить Не синхронизировать файлы. См. ниже

Для получения исчерпывающего списка всех возможных параметров и более подробной информации о вышеуказанных параметрах посетите официальную справочную страницу rsync. Имейте в виду, что параметры rsync могут быть объединены в цепочку, rsync -av объединяет два флага -a и -v .

Предварительный просмотр изменений

Удобную опцию --dry-run можно сократить до -n , а также объединить с другими опциями, например, -avn . Это даст вам предварительный просмотр того, что произойдет, прежде чем что-либо делать:

 $ rsync -avn ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
отправка добавочного списка файлов
./
index.php
wp-контент/темы/ваша-тема/404.php
wp-контент/темы/ваша-тема/archive.php
wp-контент/темы/ваша-тема/content-link.php
отправлено 39119 байт получено 196 байт 11 232,86 байт/с
общий размер 23 325 044 ускорение 593,29 (DRY RUN)
 

Теперь при запуске будет распечатано все, что rsync передаст — ничего не делая. Лучше всегда выполнять пробный прогон перед фактической синхронизацией. Как только вы убедитесь, что в наборе изменений находятся только файлы, которые вы хотите передать, вы можете просто снова удалить n из параметров и выполнить его в обычном режиме.

Синхронизация отдельных папок

Это вариант использования rsync в качестве дополнительного шага при работе в основном с Git. В этом случае вы хотите включить только определенную папку и ее содержимое. Возможно, вы захотите «загрузить» папку dist с скомпилированными CSS, JS и изображениями. Или вы хотите «загрузить» папку с ресурсами, когда редактор загрузил новые изображения в CMS. Это основная команда:

 $ rsync -av --include='/{{folder}}/***' --exclude='*' ./ {{app-name}}@deploy.{{region}}.frbit.com: ~/
 

С помощью параметра --include вы можете указать путь для включения, но вам все равно нужно исключить все остальное. Синтаксис включения/исключения является гибким, поскольку вы можете включать шаблоны и несколько папок одновременно. В качестве альтернативы вы также можете просто определить локальную папку и удаленную папку.

Исключение файлов

Иногда требуется исключить файлы из синхронизации. Вы можете просто добавить --exclude=path/to/file . Скажем, нам не нужен 404.php из предыдущего примера для переноса, достаточно сделать:

 # использовать абсолютный путь, если смотреть из исходного корня
$ rsync -avC --exclude wp-content/themes/your-theme/404.php ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
 

Значение --exclude является шаблоном. Его можно сопоставить с файлами, которые необходимо передать. В этом случае следующие шаблоны будут иметь тот же эффект:

 # использовать частичный путь
$ rsync -avC --exclude themes/your-theme/404.php ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
# использовать наименьший возможный частичный путь
$ rsync -avC --exclude 404.php ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
 

ПРИМЕЧАНИЕ. Начальный символ / важен. --exclude 404.php и --exclude /404.php — это , а не одно и то же. Первое означает: любой путь, который содержит «404.php», должен быть исключен. Последнее означает: любой путь, начинающийся с «/404.php», должен быть исключен.

Расширенные шаблоны исключения

Вы также можете использовать подстановочные знаки. Например:

 $ rsync -av --exclude "*.jpg" --exclude "*.jpeg"` ...
# исключить все файлы JPEG
$ rsync -av --exclude "/wp-content/themes/*/404.php" ...
# исключаем все файлы, которые начинаются с `/wp-content/themes`, за которыми следует произвольное имя (без косых черт! поэтому только один уровень подкаталога!) и заканчиваются `404.php`. Итак, в основном: все файлы `404.php` всех тем.
$ rsync -av --exclude "темы/**/*.css" ...
# исключить все файлы, имя пути которых содержит `themes/`, за которым следует что-либо (включая любое количество подкаталогов) и заканчивающееся на `.css`.  Итак, все файлы `.css` во всех темах.
 

Кроме того, как вы видите, в примере с JPEG вы можете добавить в команду любое количество опций --exclude .

Запоминание исключений в файле

Если у вас есть набор файлов, которые вы всегда хотите исключить, вы можете создать файл, содержащий все исключения, а затем использовать его через --exclude-from :

 # добавить два исключения в простой текстовый файл с именем ".rsyncignore"
$ эхо 404.php >> .rsyncignore
$ echo что-то еще.php >> .rsyncignore
# запустить rsync, используя файл .rsyncignore
$ rsync -av --exclude-from .rsyncignore ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
 

ПРИМЕЧАНИЕ. Имя файла .rsyncignore — это просто пример имени, используйте любое имя для исключений.

С помощью исключений и фильтрации можно сделать гораздо больше. Есть не только --include , который позволяет гранулировать предыдущие шаблоны --exclude , но и --filter . Вот очень интересный пост в блоге Айры Кук.

Работа с устаревшими файлами

rsync по умолчанию будет работать неразрушающим образом, как наша стратегия перезаписи, но не удаления. Таким образом, новые файлы будут записаны и заменены, но старые файлы не будут удалены. Иногда это не то, что вы хотите. Иногда хочется точной копии — зеркала.

Итак, как удалить устаревшие файлы на пульте? Краткий ответ: добавьте параметр --delete в свою командную строку, и все готово. Чтобы дать вам пример, используя предыдущую настройку WordPress: скажем, вы удалили этот надоедливый файл 404.php локально. Теперь, если вы запустите rsync без опции --delete (и никаких других добавленных или измененных файлов), rsync сообщит вам, что он ничего не сделает:

 $ rsync -av ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
отправка добавочного списка файлов
wp-контент/темы/ваша-тема/
отправлено 39037 байт получено 162 байта 15 679,60 байт/с
общий размер . ..
 

Хотя он помечает папку wp-content/themes/your-theme/ , как если бы были изменения (удаление 404.php ), rsync не применит никаких изменений. Теперь, если вы запустите его с параметром --delete , файл будет удален из места назначения. Это функция, а не ошибка , что означает: rsync не подведет вас, удаляя файлы без вашего разрешения. В любом случае, при первом запуске удаления, как всегда, используйте сокращенную форму -n из опции --dry-run , чтобы показать вам, что именно будет удалено:

 $ rsync -avn --delete ./ {{app-name}}@deploy.{{region}}.frbit.com:~/
отправка добавочного списка файлов
удаление wp-content/themes/your-theme/404.php
отправлено 39 062 байт получено 231 байт 15 717,20 байт/с
общий размер ...
 

После того, как вы подтвердите, что rsync удалит только то, что вы хотите (в противном случае: --exclude также работает для исключения файлов, которые не находятся в вашем локальном наборе файлов, но удалены, и вы не хотите удалять их из удаленного) , вы можете пойти дальше и удалить -n вариант и запустить снова.

rsync даже дает вам четыре разных способа обработки удалений: помимо флага --delete , есть также флаг --delete-before , --delete-after , --delete-во время и --delete-delay --delete-excluded , но это еще один особый случай). Эти четыре варианта --delete просто позволяют контролировать удаление файлов. На самом деле это очень удобно: при работе с большим количеством измененных файлов на работающем веб-сайте вы можете использовать --delete-after вместо --delete-before , чтобы сначала все новые файлы были на месте, затем удалялись устаревшие файлы, что увеличивает вероятность того, что ваш сайт не «перебивается» при обработке запроса во время синхронизации, которая опирается на файлы, которые будут удалены. Я думаю, вы поняли суть.

Дополнительные темы

Крайние случаи SSH

Если вам нужно установить определенные параметры SSH, например, если вам нужно предоставить определенный закрытый ключ, вы можете использовать --rsh , что означает «удаленная оболочка» и может быть сокращено до -e . Вот пример:

 # использовать определенный закрытый ключ
$ rsync -av -e 'ssh -i /path/to/your/key' {{app-name}}@deploy.{{region}}.frbit.com:~/ ./
# принудительная аутентификация по паролю
$ rsync -av -e 'ssh -o PreferredAuthentications=password' {{app-name}}@deploy.{{region}}.frbit.com:~/ ./
 

Как rsync передает только изменения

Допустим, вы изменили десять файлов в локальном наборе кодов и хотите развернуть их сейчас. rsync сначала создаст локальный набор файлов и каталогов и удаленный набор файлов и каталогов. Для каждого элемента в любом наборе будет сгенерировано значение проверки. Это контрольное значение может быть отметкой времени последнего изменения файла, размером файла, текущими разрешениями или даже контрольной суммой (например, MD5) содержимого файла. Или любое их сочетание. При использовании опции -a rsync будет использовать метку времени + размер файла, что является хорошим балансом между производительностью и точностью.

Дальнейшее чтение

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

  • Страница руководства по rsync
  • Как работает rsync

Синтаксис кода — поддержка — HUGO

Polarhardboiled 1

Возможно глупый вопрос, но я заметил в различных темах Hugo разные способы с точки зрения синтаксиса:
Например, в чем разница между {{- .Title -}} и {{ .Title }}
То же самое для {{ partial "footer.html" . }} {{- частичный "footer.html" . -}} и {{ частичный "нижний колонтитул" . }}
Какой лучший и правильный вариант, если он есть?

Александрос 2

Это зависит от того, что вам нужно сделать. Иногда вам нужно контролировать пробелы, а иногда нет. Здесь нет правильного или неправильного. См.: https://gohugo.io/templates/introduction/#whitespace

1 Нравится

it-gro 3

Ну, я немного поздно понял разницу, и впоследствии мне пришлось использовать {{- для довольно большого количества строк.

Для файлов css предпринимаются усилия по их минимизации. Например. Инструменты Google PageSpeed ​​хотят, чтобы вы в основном удалили все пробелы для файлов css.

 {{ если правда }}
        {{/* дела, которые необходимо сделать */}}
        {{/* дела, которые необходимо сделать */}}
        {{/* дела, которые необходимо сделать */}}
        {{ конец }}
 

даст вам 5 строк html — все они заполнены пробелами (табуляциями или пробелами — в зависимости от настроек вашего редактора)
Если вы заботитесь о минимизации (вашего) css, то вы, вероятно, не хотите, чтобы ваши html файлы были заполнены с кучей пустых пробелов.

 {{- если правда }}
        {{- /* дела, которые необходимо сделать */}}
        {{- /* дела, которые необходимо сделать */}}
        {{- /* дела, которые необходимо сделать */}}
        {{-  конец }}
 

уберет эти строки.
Просмотрите сгенерированный HTML-код (просмотрите исходный код в браузере) и удалите блоки «пустая строка» с помощью {{- синтаксис.
(убедитесь, что вы проверили документ, упомянутый @alexandros)

Leo_Merkel 4

Я минимизирую свой HTML-код в продакшене и поэтому не забочусь о пробелах в сгенерированном выводе. А в режиме разработки мне все равно.

Минификация выполняется Gulp с помощью gulp-htmlmin . Я называю эту задачу gulp в своем сценарии bash для производства.

ит-гро 5

Лев_Меркель:

Минификация выполняется Gulp с помощью gulp-htmlmin

Хороший совет — но нельзя предполагать конкретную цепочку инструментов.
Я развертываю с помощью rsync сразу после Hugo.
Конечно, для этого можно было бы использовать однострочник на perl, но суть не в этом.
Вопрос в том, готов ли выход Hugo к производству или нет.
Когда я проверяю демонстрационные страницы первых тем в https://themes.gohugo.io/tags/blog/, я вижу много блоков с пробелами (без обид).
Хорошо это или плохо — спорно…

Leo_Merkel 6

Верно.

Полярный вкрутую 7

Я только собираюсь завершить работу над своим сайтом, и мне интересно, как лучше всего развернуть его на моем веб-сайте, размещенном на хостинге. Мой первый базовый подход заключался в прямой загрузке файлов (в каталоге /public) с помощью FTP.

@Leo_Merkel
Не могли бы вы объяснить подробнее или помочь мне минимизировать его, как это сделали вы? знакомы со всеми этими инструментами (gulp, Rsync и т. д.)

В течение тестового периода я создаю свой сайт локально и развертываю его со страницами Gitlab (пока успешно).

Лев_Меркель 8

Полярный вкрутую:

Не могли бы вы объяснить подробнее или помочь мне уменьшить его, как вы сделали

Конечно. Но мой конвейер Gulp довольно сложен для CSS в разработке, постановке и производстве, адаптивных изображений, конкатенации JavaScript, минимизации HTML и т. д. Так что Gulp может быть чем-то излишним только для минимизации HTML.

Вместо этого вы можете использовать минимизатор HTML в командной строке: https://www.npmjs.com/package/html-minifier-cli

Попробуйте и дайте мне знать, если вам нужно больше.

Полярный вкрутую 9

Ок, понял
попробую восстановить

it-gro 10

Полярный вкрутую:

Является ли развертывание с помощью Rsync самым удобным или самым простым способом

Для моей установки это оба варианта, но в вашей ситуации они могут работать по-другому.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *