- PVSM.RU - https://www.pvsm.ru -
[1]Представляю общественности утилиту RealSync [1] (GPL). Ее призвание — облегчить работу тех, кто периодически мучается от лагов сетевой папки Samba при поиске/редактировании файлов веб-проекта. Идея RealSync в том, что вы теперь работаете с файлами сайта на локальной машине в привычной IDE, а результат, как и прежде, смотрите на удаленном разработческом веб-сервере, куда RealSync копирует изменения в реальном времени. В результате вы можете, например, запустить поиск по всем файлам в IDE — они же локальные, а не подключены через сетевую папку по Samba, так что поиск работает очень быстро; при этом ваш Ctrl+S продолжает попадать на сервер моментально, как и при работе через сетевую папку.
RealSync [1] — утилита для Windows, MacOS и Linux, позволяющая в реальном времени содержать на удаленном сервере точную копию файлов (например, скриптов на PHP, Python, Ruby и др.) из папки на вашем локальном компьютере, даже в условиях плохой связи, когда вы работаете из дома. Все изменения, производимые в локальной папке, попадают на сервер практически моментально (задержка около 0.2 с), независимо от того, сколько этих изменений и каким именно образом они были внесены (хоть через IDE, хоть через Блокнот или Far).
Главное отличие RealSync от аналогов — в том, что он крайне устойчив к нестабильности интернет-соединения, реконнектам и тайм-аутам. При этом используется SSH-соединение, доступ через которое конфигурируется автоматически при первом запуске утилиты (т.е. не нужно возиться с ключами — настройка производится в интерактивном режиме).
Фактически, случайно «убить» RealSync почти невозможно. Вы можете держать его постоянно свернутым в трее и забыть про его существование (CPU он почти не ест). Если утилита видит, что соединение разорвалось на длительный срок, автоматически запускается знакомый многим алгоритм RSYNC для быстрого копирования большого количества различий. В режиме же реального времени применяется собственный протокол поверх SSH, чтобы при нажатии Ctrl+S в редакторе вы сразу же видели изменения на сервере. Передача файла сопровождается приятным «треньканьем» (отключаемым при необходимости в конфиге), а временная потеря связи — покраснением иконки (когда связь восстановится, иконка обратно станет серой, а RealSync «догонит» накопившиеся изменения).
Вообще говоря, существует несколько способов вести разработку веб-скриптов. Первый способ — использовать локальный веб-сервер. У данного метода есть как масса преимуществ (больший контроль, улучшение переносимости и кроссплатформенности и т.д.), так и масса недостатков, как то: потенциальное отличие конфигурации локального сервера от конфигурации дев- и продакшен-зон, необходимость либо следить за синхронностью локальной SQL-базы, либо ждать, пока тормозит доступ к единой дев-базе по интернету и т.д. Мы не будем в данной статье рассматривать этот метод, хотя он, безусловно, имеет право на жизнь (и, как минимум, применяется 1 миллионом зарегистрированных пользователей того же Денвера).
Второй способ — использовать веб-сервер, установленный в офисе компании (или на тестовой машине в датацентре), обслуживаемый штатными админами. На таком веб-сервере может быть несколько директорий, по одной для каждого разработчика. Каждый программист ведет работу в своей директории, чтобы не мешать другим, и смотрит результат на своем поддомене (или на своем номере порта). Вот этот способ мы и рассмотрим.
К директории на удаленном сервере нужно ведь как-то «доступаться». В наиболее распространенном случае ее просто подключают в качестве сетевой папки на локальную машину по Samba. Этот способ имеет сразу несколько неудобств:
Я знаю многих людей, которые для обхода неудобства (2) заходят по SSH на сервер и в консоли используют grep для поиска по файлам, причем сами работают в IDE. Мне это кажется верхом неудобства. Тем более что в phpStorm, например, поиск по всем локальным файлам даже очень большого проекта работает ощутимо быстрее grep-а и занимает 1-2 секунды (как они этого добились — для меня загадка; видимо, индексируют что-то заранее). Лично я постоянно и с комфортом пользуюсь поиском в phpStorm по локальным файлам — в среднем раз по 50 в день.
Есть еще, конечно, любители работать в VIM в SSH-консоли прямо на сервере; я их уважаю, но вряд ли когда примкну к их лагерю: все-таки удобства, предоставляемые хорошей графической IDE, для меня перевешивают.
Итак, чтобы решить проблему скорости поиска, нужно хранить исходники на локальном диске и искать уже по ним. И сразу же возникает вопрос, как исходники попадут на удаленный веб-сервер при нажатии Ctrl+S. Тут возможны несколько вариантов.
RealSync задумывался как инструмент, обеспечивающий устойчивую работу в условиях плохой связи и не требующий внимания от программиста («запустил и забыл»). Именно таким он и получился, в отличие от многочисленных аналогов.
Это очень популярный вопрос, связанный с тем, что RealSync всегда затирает любые изменения, производимые напрямую в папке на сервере (если не сразу, так при очередном реконнекте точно). Только изменения в локальной папке имеют смысл и приоритет.
Но давайте задумаемся, зачем может понадобиться двусторонняя синхронизация?
В целом нужно понимать, что RealSync — это не синхронизатор, это репликатор. Если перестать воспринимать папку на веб-сервере как нечто самостоятельное, а считать ее просто автоматическим «зеркалом» и перестать ходить в нее руками по SSH (действительно, зачем это делать?), все встает на свои места. И в большинстве случаев оказывается, что двусторонняя синхронизация просто не нужна (но если вы по-прежнему считаете иначе, пользуйтесь Unison-ом — если он у вас приживется, конечно.)
Все достаточно просто: сначала нужно скачать RealSync [1] и скопировать его куда-нибудь, а затем где-то (в Автозагрузке или на Рабочем столе) разместить ярлык со следующей командной строкой:
"C:/Program Files/dklab_realsync/realsync.exe" ПолныйПутьДоВашейПапкиИсходников - или для MacOS и Linux - perl /opt/dklab_realsync/realsync ПолныйПутьДоВашейПапкиИсходников
При первом запуске вы получите примерно такое окно, в котором нужно будет в интерактивном режиме ввести адрес сервера, ваш SSH-логин и пароль на нем (пароль запрашивается исключительно процессом SSH и не сохраняется на локальной машине, см. ниже), имя папки на удаленном сервере и т.д.
Если вы уже имеете беспарольный доступ к серверу по SSH-ключу, пароль не будет запрашиваться вообще, даже в первый раз. Если еще не имеете — RealSync сам сгенерирует открытый+закрытый ключ, отрытый положится на сервер, а закрытый — в вашу домашнюю директорию на локальной машине (в специальную папку, которую воспринимает RealSync).
Остальные настройки конфигурации запишутся в файл ПолныйПутьДоВашейПапкиИсходников/.realsync, так что при следующем запуске уже никаких вопросов задано не будет, а просто запустится синхронизация, и программа свернется в трей (для Windows).
Теперь можно править любые исходники и убеждаться, что они моментально попадают на сервер. Если кликнуть на иконку запущенного RealSync в трее, то процесс работы можно наблюдать примерно вот в таком окне:
Дистрибутив RealSync для Windows является самодостаточным: он уже включает в себя RSYNC, SSH, мини-версию Perl и другие необходимые утилиты, так что вам достаточно будет просто запускать realsync.exe и ни о чем этом не думать. В MacOS и Linux же все эти утилиты, как правило, уже имеются в системе, поэтому они и используются.
Итак, RealSync висит в трее, вы его никогда не выключаете, поэтому у вас возникает полная иллюзия, что вы работаете на локальной машине с удаленной папкой. При этом вы имеете все преимущества производительности локального поиска и работы с IDE. Вот это и была цель разработки RealSync [1].
Буду рад, если утилита сделает еще чью-нибудь повседневную работу легче. Комментарии приветствуются.
Автор: DmitryKoterov
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sinhronizatsiya/3058
Ссылки в тексте:
[1] Image: http://dklab.ru/lib/dklab_realsync/
Нажмите здесь для печати.