Перейти к содержанию

Синхронизация Gramps Web и Gramps Desktop

Gramps Web Sync — это дополнение для Gramps, которое позволяет синхронизировать вашу базу данных Gramps на настольном компьютере с Gramps Web, включая медиафайлы.

Warning

Как и с любым инструментом синхронизации, не рассматривайте это как инструмент резервного копирования. Случайное удаление с одной стороны будет распространено на другую сторону. Убедитесь, что вы регулярно создаете резервные копии (в формате Gramps XML) вашего семейного дерева.

Info

Документация относится к последней версии дополнения Gramps Web Sync. Пожалуйста, используйте менеджер дополнений Gramps для обновления дополнения до последней версии, если это необходимо.

Установка

Дополнение требует Gramps 6.0, работающего на Python 3.10 или новее. Оно доступно в Gramps Desktop и может быть установлено обычным способом.

Warn

Пожалуйста, убедитесь, что вы используете ту же версию Gramps на вашем настольном компьютере, что и на вашем сервере. См. раздел Получить помощь, чтобы узнать, какая версия Gramps работает на вашем сервере. Версия Gramps имеет вид MAJOR.MINOR.PATCH, и MAJOR и MINOR должны быть одинаковыми на веб- и настольной версиях.

Дополнительный шаг:

Ошибка Gnome keyring

В настоящее время существует ошибка в python keyring, которая затрагивает многие конфигурации рабочего стола Gnome. Вам может потребоваться создать файл конфигурации ~/.config/python_keyring/keyringrc.cfg и отредактировать его следующим образом:

[backend]
default-keyring=keyring.backends.SecretService.Keyring
  • Установите keyring (например, sudo apt install python3-keyring или sudo dnf install python3-keyring), чтобы обеспечить безопасное хранение пароля API в менеджере паролей вашей системы.

Использование

После установки дополнение доступно в Gramps в разделе Инструменты > Обработка семейного дерева > Gramps Web Sync. После запуска и подтверждения диалога о том, что история отмены будет сброшена, мастер проведет вас через шаги синхронизации. Обратите внимание, что изменения не будут применены к вашему локальному дереву или к серверу, пока вы явно не подтвердите их.

Шаг 1: введите учетные данные сервера

Инструмент запросит у вас базовый URL (например: https://mygrampsweb.com/) вашего экземпляра Gramps Web, ваше имя пользователя и пароль. Вам нужна учетная запись с как минимум правами редактора, чтобы синхронизировать изменения обратно в вашу удаленную базу данных. Имя пользователя и URL будут храниться в открытом виде в вашей пользовательской директории Gramps, пароль будет храниться только в том случае, если установлен keyring (см. выше).

Шаг 2: проверьте изменения

После подтверждения ваших учетных данных инструмент сравнивает локальные и удаленные базы данных и оценивает, есть ли какие-либо различия. Если есть, он отображает список изменений объектов (где объект может быть человеком, семьей, событием, местом и т. д.), относящихся к одной из следующих категорий:

  • добавлено локально
  • удалено локально
  • изменено локально
  • добавлено удаленно
  • удалено удаленно
  • изменено удаленно
  • изменено одновременно (т.е. с обеих сторон)

Инструмент использует временные метки, чтобы оценить, какая сторона новее для каждого объекта (см. "Фон" ниже, если вас интересуют детали).

Если изменения выглядят так, как ожидалось, вы можете нажать "Применить", чтобы применить необходимые изменения к локальным и удаленным базам данных.

Дополнительно: Режим синхронизации

Под списком изменений вы можете выбрать режим синхронизации.

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

Опция сбросить удаленное на локальное вместо этого обеспечит, чтобы удаленная база данных Gramps выглядела точно так же, как локальная. Любые объекты, обнаруженные как "добавленные удаленно", будут снова удалены, объекты, обнаруженные как "удаленные удаленно", будут снова добавлены и т. д. Никакие изменения не будут применены к локальной базе данных Gramps.

Опция сбросить локальное на удаленное работает противоположным образом и устанавливает локальное состояние в состояние удаленной базы данных. Никакие изменения не будут применены к удаленной базе данных.

Наконец, опция объединить похожа на двунаправленную синхронизацию тем, что она изменяет обе базы данных, но не удаляет никаких объектов, а вместо этого восстанавливает все объекты, удаленные только с одной стороны.

Шаг 3: синхронизировать медиафайлы

После синхронизации баз данных инструмент проверяет наличие новых или обновленных медиафайлов. Если он находит таковые, он отображает список и запрашивает подтверждение для загрузки/скачивания необходимых файлов.

Обратите внимание на следующие ограничения синхронизации медиафайлов:

  • Если локальный файл имеет другую контрольную сумму, чем тот, который хранится в базе данных Gramps (это может произойти, например, для файлов Word, когда они редактируются после добавления в Gramps), загрузка завершится неудачей с сообщением об ошибке.
  • Инструмент не проверяет целостность всех локальных файлов, поэтому, если локальный файл существует по пути, хранящемуся для медиаобъекта, но файл отличается от файла на сервере, инструмент не обнаружит этого. Используйте дополнение Media Verify, чтобы обнаружить файлы с некорректными контрольными суммами.

Устранение неполадок

Отладочный лог

Если вы сталкиваетесь с проблемами с дополнением Sync, пожалуйста, запустите Gramps с включенной отладкой, запустив Gramps из командной строки с помощью следующей опции:

gramps --debug grampswebsync

Это выведет множество полезных логов в командной строке, которые помогут вам определить причину проблемы.

Учетные данные сервера

Если первый шаг уже завершился неудачей, пожалуйста, дважды проверьте URL сервера, ваше имя пользователя и пароль.

Проблемы с разрешениями

Если вы столкнулись с ошибкой, связанной с разрешениями, проверьте роль пользователя вашей учетной записи Gramps Web. Вы можете применять изменения к удаленной базе данных только если вы являетесь пользователем с ролью редактора, владельца или администратора.

Неожиданные изменения в базе данных

Если инструмент синхронизации обнаруживает изменения, которые, по вашему мнению, не произошли, это может быть связано с несоответствиями в одной из баз данных, которые вводят Gramps в заблуждение, или с тем, что время не синхронизировано между вашим локальным компьютером и сервером.

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

Вы также можете запустить инструмент проверки и восстановления на вашей локальной базе данных и посмотреть, поможет ли это.

Брутальный, но эффективный метод, чтобы убедиться, что несоответствия в вашей локальной базе данных не вызывают ложных срабатываний, — это экспортировать вашу базу данных в Gramps XML и импортировать ее в новую, пустую базу данных. Это операция без потерь, но гарантирует, что все данные импортированы последовательно.

Ошибки таймаута

Если вы испытываете ошибки таймаута (например, указанные ошибкой HTTP статус 408 или другим сообщением об ошибке, включающим слово "таймаут"), это, вероятно, связано с большим количеством изменений, которые необходимо синхронизировать на удаленной стороне в сочетании с настройками вашего сервера.

Для версий дополнения синхронизации ранее v1.2.0 и версий Gramps Web API ранее v2.7.0 (см. вкладку информации о версии в Gramps Web) синхронизация на стороне сервера обрабатывалась в одном запросе, который мог истечь, в зависимости от конфигурации сервера, через одну или максимум несколько минут. Для больших синхронизаций (например, после импорта тысяч объектов в локальную базу данных или попытки синхронизировать полную локальную базу данных с пустой удаленной базой данных) это может быть слишком коротким.

Если вы используете дополнение синхронизации v1.2.0 или новее и Gramps Web API v2.7.0 или новее, синхронизация на стороне сервера обрабатывается фоновым работником и может длиться очень долго (будет отображаться индикатор прогресса), и ошибки таймаута не должны возникать.

Неожиданные ошибки медиафайлов

Если загрузка медиафайла завершается неудачей, это часто вызвано несоответствием контрольной суммы фактического файла на диске и контрольной суммы в локальной базе данных Gramps. Это часто происходит с редактируемыми файлами, такими как офисные документы, отредактированные вне Gramps. Пожалуйста, используйте дополнение Gramps Media Verify, чтобы исправить контрольные суммы всех медиафайлов.

Попросите о помощи

Если все вышеперечисленное не помогло, вы можете обратиться за помощью к сообществу, разместив сообщение в категории Gramps Web на форуме Gramps. Пожалуйста, убедитесь, что вы предоставили:

  • версию дополнения Gramps Web Sync (и используйте, пожалуйста, последнюю выпущенную версию)
  • версию Gramps Desktop, которую вы используете
  • вывод отладочного лога Gramps, включенного, как описано выше
  • информацию о версии Gramps Web (вы можете найти ее в разделе Настройки/Информация о версии)
  • любые детали, которые вы можете предоставить о вашей установке Gramps Web (самостоятельный хостинг, Grampshub и т. д.)
  • вывод логов вашего сервера Gramps Web, если у вас есть к ним доступ (при использовании docker: docker compose logs --tail 100 grampsweb и docker compose logs --tail 100 grampsweb-celery)

Фон: как работает дополнение

Если вам интересно, как на самом деле работает дополнение, вы можете найти некоторые дополнительные детали в этом разделе.

Дополнение предназначено для поддержания локальной базы данных Gramps в синхронизации с удаленной базой данных Gramps Web, чтобы позволить как локальные, так и удаленные изменения (коллаборативное редактирование).

Оно не подходит

  • Для синхронизации с базой данных, которая не является прямым производным (начиная с копии базы данных или экспорта/импорта Gramps XML) локальной базы данных
  • Для объединения двух баз данных с большим количеством изменений с обеих сторон, которые требуют ручного внимания для объединения. Используйте отличный Инструмент импорта и слияния для этой цели.

Принципы работы инструмента очень просты:

  • Он сравнивает локальные и удаленные базы данных
  • Если есть какие-либо различия, он проверяет временную метку последнего идентичного объекта, назовем его t
  • Если объект изменился более недавно, чем t, существует в одной базе данных, но не в другой, он синхронизируется на обе (предположим, новый объект)
  • Если объект изменился в последний раз до t отсутствует в одной базе данных, он удаляется в обеих (предположим, удаленный объект)
  • Если объект отличается, но изменился после t только в одной базе данных, синхронизируется на другую (предположим, измененный объект)
  • Если объект отличается, но изменился после t в обеих базах данных, они объединяются (предположим, конфликтующее изменение)

Этот алгоритм прост и надежен, так как не требует отслеживания истории синхронизации. Однако он работает лучше, когда вы синхронизируете часто.