Dropbox DIY для синхронизации с вашим сервером: rsync + FSEvents/inotify/ что-нибудь еще?

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

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

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

Вот мои настройки:

У меня есть Git-репозиторий на GitHub, и я делаю регулярные развертывания с Capistrano. Вот моя проблема: у нас есть инфраструктура и данные, которые делают невозможным реальное локальное развитие.

Мой код может существовать локально, я могу создавать версии на github, но он должен работать на сервере, даже когда я занимаюсь разработкой. Чтобы избежать развития ковбоя, я придумал это решение:

  • имейте в виду, что это только для внешнего уровня, который включает в себя сотни файлов tpl (html + smarty), css и js *

  • Главный филиал работает для общественности

  • При входе в наше живое приложение разработчики могут переключиться в "режим разработчика" и указать другой репозиторий, существующий на сервере. Этот "призрачный" репозиторий является просто точной копией локальной рабочей копии разработчика. Он синхронизируется с локальным репозиторием разработчика через клон dropbox.

Таким образом, это может быть наш рабочий процесс:

  1. Разработчик работает локально на все вещи
  2. Каждый раз, когда что-то меняется локально, также обновляется репозиторий разработчика "ghost", и все можно протестировать на сервере.
  3. Когда разработчик доволен результатами, он может зафиксировать и отправить в ветку разработки.
  4. Когда команда готова к новому выпуску, все коммиты могут быть развернуты через 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). Я развернул очень успешное решение, подобное этому, и его очень легко настроить (без сложных / нестандартных сценариев).

Также обратите внимание на следующее:

  • Аэрофс (кроссплатформенный)
  • OwnCloud (кроссплатформенный)

Мне кажется, что ты пытаешься сделать это трудным путем.

Я работаю над программным проектом, который имеет большую исходную базу и лучше всего построен на сервере, а не на моей домашней машине, и я просто ssh на сервер и таким образом редактирую источник. (На самом деле, я использую NX для использования удаленного сеанса X-Windows, но это одно и то же.) Сервер находится в Калифорнии, я в Великобритании, и задержка не является проблемой, так что если вы не работая над ужасной связью, я не вижу смысла в чем-то более причудливом.

Если вам нужно использовать локальный редактор, попробуйте смонтировать удаленную систему с помощью sshfs. Это не идеально, но это работает. Я не рекомендовал бы делать что-либо, что сканирует много файлов таким способом.

В противном случае, если вы должны использовать зеркальный каталог, почему он должен быть автоматическим? Конечно, разработчик знает, когда он хочет протестировать изменения, и может просто нажать кнопку rsync?

Другие вопросы по тегам