RubyУточки кря-кря

Репост из моего бложика, но наверняка кому-нибудь пригодится и здесь.

Возникают ситуации, когда нужно залить куда-нибудь файлы (например, статичный HTML на хостинг), где есть только доступ по убогому FTP. В более удачных случаях есть rsync или SSH, поэтому можно применять готовые инструменты развёртывания, но такой возможности не было.

Поскольку желание делать всё руками отсутствовало, но работать всё-же хотелось, вчера за вечер накидал на Ruby простенькое и работающее решение для развёртывания статики через FTP: милые utochki, которые плавают, чудесно крякают и заливают файлы на хостинг.



Как работают utochki?
Как и любой хороший инструмент, они просто делает свою работу, и делают её хорошо. Сейчас имеются две команды: push (залить) и pull (слить). Если «сливатель» устроен довольно просто, то push спроектирован так, чтобы процесс заливания файлов проходил как транзакция:
  • 1. Подключаемся.
  • 2. Заливаем все файлы во временную директорию (1).
  • 3. Перемещаем все файлы из целевого каталога в ещё одну временную директорию (2).
  • 4. Перемещаем все файлы из временной директории (1) в целевую.
  • 5. Удаляем все временные директории (1 и 2) и прочий оставшийся мусор.
  • 6. Отключаемся.

Таким образом, достигается неплохая надёжность решения при сохранении простоты реализации.

Уже хочу!
Для того, чтобы использовать utochki нужно поставить gem utochki и создать в корневом каталоге проекта конфигурационный YAML-файл utochki.yaml следующего вида:

После этого можно совершенно без проблем плавать с уточками:
eveel@notazik{~/Work/suckless-ru}% utochki push
USER не_палимся
MKD /не_палимся/tmp/1270370845
PASV
STOR /не_палимся/tmp/1270370845/index.html
MKD /не_палимся/tmp/1270370845-www
PASV
NLST /не_палимся/www
PASV
NLST /не_палимся/tmp/1270370845
RNFR /не_палимся/tmp/1270370845/index.html
PASV
LIST /не_палимся/tmp/1270370845-www
PASV
LIST /не_палимся/tmp/1270370845-www
PASV
LIST /не_палимся/tmp/1270370845
PASV
LIST /не_палимся/tmp/1270370845

Да, и команда utochki pull сольёт файлы с сервера в каталог с именем «имя-pub-директории-UNIXTIME»:
eveel@notazik{~/Work/suckless-ru}% utochki pull
USER u227112
PASV
LIST /не_палимся/www
PASV
LIST /не_палимся/www
PASV
RETR /не_палимся/www/index.html
eveel@notazik{~/Work/suckless-ru}% ls | grep www
www-1270370944

Исходники доступны под MIT License в репозитории utochki на GitHub.

Приятного плавания!
  • +7
  • eveel
  • 17 апреля 2010, 14:04

Комментарии (11)

Лучше ftp на сервере, чем утки под кроватью. =\

Толи я такой тупой, толи статья кривая, но я не понял, «нафига?» и чем оно вообще полезно.
Статья не кривая, остаётся единственный вариант.

Значит просто не сталкивался с проблемой. Есть хостинг, который умеет только FTP. Есть сайт, сделанный из статического HTML. Для того, чтобы не дрочиться каждый раз с ручной заливкой сайта на сервер, есть уточки, которые кря-кря и файлы на месте.
Обычно в таких случаях просят отсыпать… =) Но я за здоровый образ жизни…

Подскажите, в каком месте приходится дрочиться, заливая сайт по ftp? Я почему-то никогда не испытывал проблем. Может что-то не так делал? =\

Так что там у вас кря-кря?
Что проще: набрать одну команду (utochki pull или utochki push) и продолжить работу, или же сидеть и забрасывать файлы руками, используя mc или любой другой FTP-capable файловый менеджер? :)
Пользую файлзиллу в качестве фтп клиента. Кинуть файлы на сервер — это одно простое действие и все произойдет.
По ssh захожу просто наутилусом, gvfs — наше всё.
Для этого надо запускать файлзиллу и самостоятельно логиниться на серваке. Почему бы это замечательное и интереснейшее занятие не поручить машине, которая изначально создавалась для упрощения выполнения рутинных задач?
А что, уточек этих твоих не надо исполнять и давать им какие-то там команды, а еще они же откуда-то должны узнать что именно ты собрался деплоить, куда, как… Конфиг после или до деплоя надо бы поредактировать и т.п. Эти ваши утки ничего не упрощают, просто извращают и без того простую задачу заливки кучки файлов по фтп.

Вот откровенно не понимаю, чего такого они делают вообще и как этим пользоваться. Говорю же, статья кривая. И где же пример того самого YAML файла, который теоретически мог связать всю картину воедино?
Write once — deploy anytime. Что плохого? :) Никакого лишнего гуя и прочих лишних сущностей.

Спасибо за напоминание. Забыл ссылку на оригинальный пост в бложике. Вообще, этот пример конечно есть: gist.github.com/355244

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

Вариант с SFTP рассмотрю, но нужно убедиться в том, что не придётся делать ещё один Capistrano или Vlad the Deployer.
  • avatar
  • Q2W
  • 17 апреля 2010, 21:33
  • #
  • 2
Можно вообще повесить кнопочку в гном-панели, которая будет запускать этот скрипт.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.