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 хронизация. Это инструмент командной строки для синхронизации файлов по сети. Это с открытым исходным кодом. Это старо, но действительно хорошо, и это до
Прочитать перед использованием
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 и 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 самым удобным или самым простым способом
Для моей установки это оба варианта, но в вашей ситуации они могут работать по-другому.