Синхронізація 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 працює на вашому сервері.
Вимоги до сервера¶
Додаток перевіряє дві речі про ваш сервер, як тільки підключається, перед завантаженням будь-яких даних, і зупиняється з повідомленням, якщо одна з них не виконується:
- Версія Gramps Web API 3.x. Ця версія додатка для Gramps 6.0 працює з Gramps Web API 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. Після підтвердження попередження діалогу про те, що історія скасування буде скасована, відкривається вікно синхронізації. Жодні зміни не застосовуються до вашого локального дерева або до сервера, поки ви їх не підтвердите.
Смуга вгорі вікна називає родовід, з яким ви синхронізуєте, обліковий запис і адресу, до яких він належить, і коли він востаннє синхронізувався. Внизу показуються версія додатка та версія веб-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, показану внизу вікна синхронізації поруч з версією веб-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, коли він новіший за найновіший ідентичний об'єкт.
Цей алгоритм простий і надійний, оскільки не вимагає відстеження історії синхронізації. Однак він працює найкраще, коли ви синхронізуєте часто.