Синхронизация Gramps Web и Gramps Desktop¶
Gramps Web Sync — это дополнение для Gramps, которое синхронизирует базу данных Gramps на вашем настольном компьютере с Gramps Web, включая медиафайлы. Изменения, внесенные с одной стороны, передаются на другую, так что вы можете работать локально и в интернете с одной и той же семейной деревом.
Как и любой инструмент синхронизации, это не резервная копия: если вы что-то удалите с одной стороны, это будет удалено и с другой стороны. Регулярно создавайте резервные копии вашего семейного дерева в формате Gramps XML.
Установка¶
Дополнение требует Gramps 6.0, работающего на Python 3.10 или новее. Оно доступно в Gramps Desktop и может быть установлено обычным способом. Эта документация описывает последнюю версию дополнения; используйте менеджер дополнений Gramps для его обновления, если это необходимо.
Ваш настольный компьютер и ваш сервер должны работать на одной и той же версии Gramps. Версия имеет вид MAJOR.MINOR.PATCH, и MAJOR и MINOR должны совпадать. См. Получить помощь, чтобы узнать, какая версия Gramps работает на вашем сервере.
Требования к серверу¶
Дополнение проверяет две вещи о вашем сервере, как только оно подключается, прежде чем что-либо будет загружено, и останавливается с сообщением, если что-то из этого не выполнено:
- Версия API Gramps Web 3.x. Эта версия дополнения для Gramps 6.0 работает с API Gramps Web 3. Старый сервер требует обновления; сервер, работающий на новой основной версии API, требует более новой версии Gramps, а не более нового дополнения, потому что каждая версия Gramps соответствует одной версии API. Вы можете найти версию вашего сервера в разделе Настройки ▸ Информация о версии в Gramps Web.
- Очередь фоновых задач. Изменения применяются на сервере как фоновая задача. Без очереди задач это будет выполняться синхронно и завершится по таймауту на любом реальном семейном дереве.
Чтобы применить изменения к удаленной базе данных, вам нужна учетная запись с ролью редактора, владельца или администратора.
Хранение вашего пароля (необязательно)¶
Установите keyring (например, sudo apt install python3-keyring или sudo dnf install python3-keyring), чтобы хранить API-пароль в менеджере паролей вашей системы. Если keyring не может быть использован, дополнение сообщает об этом и продолжает без него — вам просто будет предложено ввести ваш пароль каждый раз.
В пакете Gramps Snap системный keyring заблокирован из-за ограничений до тех пор, пока вы не подключите интерфейс один раз. Дополнение показывает эту команду, когда оно обнаруживает ситуацию:
snap connect gramps:password-manager-service
На многих конфигурациях рабочего стола Gnome ошибка в python keyring означает, что вам нужно создать файл конфигурации ~/.config/python_keyring/keyringrc.cfg со следующим содержимым:
[backend]
default-keyring=keyring.backends.SecretService.Keyring
Использование¶
Дополнение доступно в Gramps в разделе Инструменты ▸ Обработка семейного дерева ▸ Gramps Web Sync. После подтверждения предупреждения в диалоговом окне о том, что история отмены будет утеряна, открывается окно синхронизации. Никакие изменения не применяются к вашему локальному дереву или к серверу, пока вы явно не подтвердите их.
Полоса в верхней части окна указывает название семейного дерева, с которым вы синхронизируетесь, учетную запись и адрес, к которому оно принадлежит, а также когда оно было в последний раз синхронизировано. Внизу отображаются версия дополнения и версия Web API сервера, что полезно при сообщении о проблеме.
Подключение¶
Если вы уже синхронизировали это семейное дерево ранее и ваш пароль сохранен, дополнение подключается сразу после открытия и переходит к сравнению. В противном случае оно запрашивает базовый URL вашего экземпляра Gramps Web (пример: https://mygrampsweb.com/), ваше имя пользователя и ваш пароль.
URL и имя пользователя хранятся в открытом виде в вашей пользовательской директории Gramps. Пароль хранится в менеджере паролей вашей системы только в том случае, если вы оставите установленным флажок Запомнить пароль; снятие флажка удаляет любой пароль, уже сохраненный для этого сервера. Если вы вводите адрес, начинающийся с http://, а не https://, дополнение предупреждает вас во время ввода, потому что ваш пароль будет отправлен в открытом виде.
Каждый сервер, с которым вы синхронизируетесь, хранится отдельно, вместе со своей записью о том, когда он был в последний раз синхронизирован, так что вы можете чередовать два сервера, не нарушая работу ни одного из них. Каждая запись также фиксирует, с каким локальным семейным деревом она была в последний раз синхронизирована. Дополнение подключается самостоятельно только тогда, когда это соответствует дереву, которое у вас открыто; в противном случае оно показывает детали подключения и ждет, пока вы нажмете Подключиться.
Доступны два действия, пока ничего не записывается:
- Сменить сервер…, на верхней полосе, возвращает к деталям подключения, чтобы вы могли указать это дерево на другой сервер. Это прерывает текущее сравнение, а не заставляет вас ждать его завершения.
- Забыть этот сервер, на панели подключения, удаляет сохраненный адрес, имя пользователя и пароль, а также запись о том, когда это дерево в последний раз синхронизировалось. Следующая синхронизация затем сравнивает два дерева с нуля.
Обзор изменений¶
Дополнение сравнивает локальные и удаленные базы данных и показывает действия, которые оно предлагает выполнить, сгруппированные по тому, какая база данных изменяется:
▾ Изменится на этом компьютере (7 объектов)
▾ Добавить 3 объекта
Персона Джон Смит I0123
▾ Обновить 4 объекта
…
▾ Изменится на сервере (5 объектов)
…
Каждая строка называет объект, так что вы можете понять, кто или что затрагивается, а не только видеть ID Gramps. Если что-то будет удалено, над списком будет указано, сколько объектов и с какой стороны.
Нажмите Применить, чтобы выполнить то, что описывает список.
Окно синхронизации не блокирует остальную часть Gramps, так что вы можете продолжать работать, пока список открыт. Если вы редактируете затронутый объект в это время, дополнение замечает это, когда вы нажимаете Применить, останавливается без внесения изменений и предлагает вам сравнить снова.
Режим синхронизации¶
Режим синхронизации выбирается над списком изменений. Изменение его перестраивает список, потому что режим определяет, что каждое различие становится.
- Двунаправленная синхронизация (по умолчанию) — изменения с обеих сторон объединяются. Объекты, отредактированные в обоих местах, объединяются.
- Сбросить сервер, чтобы он соответствовал этому компьютеру — сервер приводится в соответствие с этим компьютером. Все изменения, внесенные только на сервере, игнорируются.
- Сбросить этот компьютер, чтобы он соответствовал серверу — этот компьютер приводится в соответствие с сервером. Все изменения, внесенные только здесь, игнорируются.
Режим слияния, доступный в версиях до 1.5, был удален. Он отличался от двунаправленной синхронизации только тем, что восстанавливал объекты, удаленные с одной стороны, вместо того, чтобы распространять удаление. Если вы на него полагались, используйте двунаправленную синхронизацию и восстановите все, что хотите сохранить, из резервной копии.
Медиафайлы¶
Медиафайлы обрабатываются как часть того же подтверждения, а не как отдельный шаг. Если какие-либо файлы нужно передать, флажок под списком предлагает переместить их:
[x] Также передать 12 медиафайлов (4 для загрузки, 8 для выгрузки)
Снимите отметку, чтобы синхронизировать изменения объектов, не трогая файлы.
Файлы, отсутствующие на обеих сторонах, перечисляются отдельно, потому что ничего нельзя сделать с ними:
2 медиафайла отсутствуют на обеих сторонах и не могут быть переданы.
Синхронизация медиафайлов имеет два ограничения:
- Если локальный файл имеет другую контрольную сумму, чем тот, который хранится в базе данных Gramps (это может произойти, например, для файлов Word, отредактированных после добавления в Gramps), загрузка завершится с сообщением об ошибке.
- Инструмент не проверяет целостность всех локальных файлов. Если файл существует по пути, хранящемуся для медиаобъекта, но отличается от файла на сервере, инструмент не обнаружит это. Используйте дополнение Media Verify, чтобы найти файлы с неправильными контрольными суммами.
Если синхронизация не удалась¶
Если синхронизация не удалась на полпути — например, из-за разрыва соединения — дополнение сообщает, что уже было применено, и предлагает Попробовать снова, что возобновляет с того шага, который не удался, а не начинает заново. Загруженная копия удаленного дерева сохраняется, поэтому повторная попытка не загружает и не сравнивает ее второй раз.
Технические детали сбоя доступны за расширителем Детали, с кнопкой для их копирования для отчета об ошибке.
Устранение неполадок¶
Неожиданные изменения. Если дополнение предлагает тревожное количество удалений, сначала проверьте верхнюю полосу: она указывает на семейное дерево на сервере, в которое вы собираетесь записать. Синхронизация дерева с сервером, содержащим другое дерево, приводит именно к этому симптому.
В противном случае неожиданные различия могут возникнуть из-за несоответствий в одной из баз данных или из-за часов, которые не синхронизированы между вашим компьютером и вашим сервером. Проверьте, что оба часа правильно установлены (часовой пояс не имеет значения, так как инструмент использует метки времени Unix) и запустите инструмент проверки и восстановления на вашей локальной базе данных. В качестве последнего средства экспортируйте вашу локальную базу данных в Gramps XML и импортируйте ее в новую, пустую базу данных. Это операция без потерь, но гарантирует, что все данные хранятся последовательно.
Ошибки медиафайлов. Неудачная загрузка часто вызвана несоответствием между контрольной суммой файла на диске и контрольной суммой в локальной базе данных Gramps, что происходит с редактируемыми файлами, такими как офисные документы, отредактированные вне Gramps. Используйте дополнение Gramps Media Verify, чтобы исправить контрольные суммы.
Ошибки разрешений. Проверьте роль вашей учетной записи пользователя Gramps Web: только редакторы, владельцы и администраторы могут применять изменения к удаленной базе данных.
Попросите о помощи¶
Если ничего из вышеперечисленного не помогает, спросите у сообщества, разместив сообщение в категории Gramps Web форума Gramps. Пожалуйста, укажите:
- версию дополнения Gramps Web Sync, показанную внизу окна синхронизации рядом с версией Web API сервера (и, пожалуйста, используйте последнюю выпущенную версию)
- версию Gramps Desktop, которую вы используете
- информацию о версии Gramps Web, найденную в разделе Настройки ▸ Информация о версии
- любые детали о вашей установке Gramps Web (самостоятельный хостинг, Grampshub и т. д.)
- вывод логов вашего сервера Gramps Web, если у вас есть к ним доступ (при использовании Docker:
docker compose logs --tail 100 grampswebиdocker compose logs --tail 100 grampsweb-celery)
Если вас попросят предоставить журнал отладки, запустите Gramps из командной строки с включенной отладкой и воспроизведите проблему:
gramps --debug grampswebsync
Основная информация: как работает дополнение¶
Дополнение предназначено для поддержания локальной базы данных Gramps в синхронизации с удаленной базой данных Gramps Web, позволяя как локальные, так и удаленные изменения (коллаборативное редактирование).
Оно не подходит
- для синхронизации с базой данных, которая не является прямым производным (начиная с копии базы данных или экспорта/импорта Gramps XML) локальной базы данных,
- для объединения двух баз данных с большим количеством изменений с обеих сторон, требующих ручного внимания для слияния. Для этой цели используйте отличный Инструмент слияния импорта.
Принципы работы просты:
- Оно сравнивает локальные и удаленные базы данных.
- Если есть какие-либо различия, оно проверяет временную метку последнего идентичного объекта, назовем его t.
- Если объект изменился более недавно, чем t, существует в одной базе данных, но отсутствует в другой, он синхронизируется в обе (предположим, новый объект).
- Если объект изменился в последний раз до t и отсутствует в одной базе данных, он удаляется в обеих (предположим, удаленный объект).
- Если объект отличается, но изменился после t только в одной базе данных, синхронизируйте его в другую (предположим, измененный объект).
- Если объект отличается, но изменился после t в обеих базах данных, объедините их (предположим, конфликтующее изменение).
Время последней успешной синхронизации также записывается, отдельно для каждого сервера, и используется как t, когда оно более позднее, чем самый новый идентичный объект.
Этот алгоритм прост и надежен, так как не требует отслеживания истории синхронизации. Однако он работает лучше всего, когда вы синхронизируете часто.