Dropbox DIY для синхронизации с вашим сервером: rsync + FSEvents/inotify/ что-нибудь еще?
Короче говоря, мне нужно создать простой клон Dropbox для синхронизации файлов с моим сервером.
Я сделал свою домашнюю работу, я провел много исследований, но ни одно из найденных решений (как кода, так и уже запеченных решений) не показалось достаточно хорошим.
Я читал и другие посты здесь о stackru, единственное отличие состоит в том, что мне нужно, чтобы задача синхронизации запускалась при событиях файловой системы. Кроме того, git уже используется в реальных целях контроля версий, и я не могу использовать его для этой задачи синхронизации.
Вот мои настройки:
У меня есть Git-репозиторий на GitHub, и я делаю регулярные развертывания с Capistrano. Вот моя проблема: у нас есть инфраструктура и данные, которые делают невозможным реальное локальное развитие.
Мой код может существовать локально, я могу создавать версии на github, но он должен работать на сервере, даже когда я занимаюсь разработкой. Чтобы избежать развития ковбоя, я придумал это решение:
имейте в виду, что это только для внешнего уровня, который включает в себя сотни файлов tpl (html + smarty), css и js *
Главный филиал работает для общественности
- При входе в наше живое приложение разработчики могут переключиться в "режим разработчика" и указать другой репозиторий, существующий на сервере. Этот "призрачный" репозиторий является просто точной копией локальной рабочей копии разработчика. Он синхронизируется с локальным репозиторием разработчика через клон dropbox.
Таким образом, это может быть наш рабочий процесс:
- Разработчик работает локально на все вещи
- Каждый раз, когда что-то меняется локально, также обновляется репозиторий разработчика "ghost", и все можно протестировать на сервере.
- Когда разработчик доволен результатами, он может зафиксировать и отправить в ветку разработки.
- Когда команда готова к новому выпуску, все коммиты могут быть развернуты через Capistrano
Таким образом, ghost-репозиторий каждого разработчика полностью отсутствует, когда дело доходит до рабочего процесса git (что касается git, эти ghost-репозитории даже не существуют, они просто являются утилитой для разработчика).
Учитывая эту (длинную!) Предпосылку, мне понадобятся следующие функции:
- возможность синхронизации по SSH
- запуск синхронизации событий файловой системы (создание / обновление / удаление файлов и каталогов)
- только синхронизация обновлений в стиле rsync (дельта-кодирование), в основном только различия
- возможно кроссплатформенное (windows/mac) решение
Среди "уже сделанных" решений:
- GoodSync
- Супер гибкий файловый синхронизатор
- ChronoSync
Казалось, только GoodSync предлагал то, что мне было нужно, но я не мог заставить функцию автоматического обновления (синхронизировать обновления файловой системы) работать любым возможным способом.
Среди рецептов, которые я должен был сделать сам, я читал о FSEvents, опциях inotify (linux) + rsync, но они могут быть немного вне моей лиги (я могу сделать базовые сценарии яблок, вероятно, не так много с FSEvents API или inotify)
Вот где я сейчас нахожусь. Я открыт для любых предложений и заранее благодарю вас за все, что вы можете поделиться по этому вопросу.
Спасибо!
2 ответа
Используйте lsyncd и samba для совместимости с Windows
Я бы порекомендовал локальный сервер Linux с общими ресурсами Samba, на котором разработчики работают локально. Затем локальный сервер будет синхронизироваться с вашим удаленным сервером с помощью lsyncd (удобное решение inotify/rsync/ssh). Я развернул очень успешное решение, подобное этому, и его очень легко настроить (без сложных / нестандартных сценариев).
Также обратите внимание на следующее:
Мне кажется, что ты пытаешься сделать это трудным путем.
Я работаю над программным проектом, который имеет большую исходную базу и лучше всего построен на сервере, а не на моей домашней машине, и я просто ssh на сервер и таким образом редактирую источник. (На самом деле, я использую NX для использования удаленного сеанса X-Windows, но это одно и то же.) Сервер находится в Калифорнии, я в Великобритании, и задержка не является проблемой, так что если вы не работая над ужасной связью, я не вижу смысла в чем-то более причудливом.
Если вам нужно использовать локальный редактор, попробуйте смонтировать удаленную систему с помощью sshfs. Это не идеально, но это работает. Я не рекомендовал бы делать что-либо, что сканирует много файлов таким способом.
В противном случае, если вы должны использовать зеркальный каталог, почему он должен быть автоматическим? Конечно, разработчик знает, когда он хочет протестировать изменения, и может просто нажать кнопку rsync?