Перейти до змісту

Синхронізація 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 в обох базах даних, об'єднайте їх (припустимо, конфліктуюче редагування)

Цей алгоритм є простим і надійним, оскільки не вимагає відстеження історії синхронізації. Однак він працює найкраще, коли ви синхронізуєте часто.