trying to sync gramps-web from my gramps with the sync add-on, it starts OK, I can login, the comparison starts and gives a result. The next step, making changes to the external database, ends with a “error 504” any idee??
my gramps: 6.0.8
My gramps-web on my synoogy-NAS in Docker:
Gramps 6.0.6
Gramps Web API 3.7.1
Gramps Web Frontend 26.2.0
Gramps QL 0.4.0
Sifts 1.1.1
locale: en
multi-tree: false
task queue: false
OCR: true
chat: false
the debug-log:
C:\\Program Files\\GrampsAIO64-6.0.8>gramps --debug grampswebsync
foutopsporing instellen grampswebsync
2026-07-15 14:56:00.190: DEBUG: grampswebsync.py: line 104: Initializing Gramps Web Sync addon.
2026-07-15 14:56:13.928: DEBUG: grampswebsync.py: line 80: Retrieving password for user hans_eggels
2026-07-15 14:56:13.929: WARNING: grampswebsync.py: line 84: Keyring is not installed, cannot retrieve password.
2026-07-15 14:56:16.682: DEBUG: grampswebsync.py: line 232: Moving to next page from page 0.
2026-07-15 14:56:16.684: DEBUG: grampswebsync.py: line 232: Moving to next page from page 1.
2026-07-15 14:56:31.250: DEBUG: grampswebsync.py: line 232: Moving to next page from page 1.
2026-07-15 14:57:07.282: DEBUG: grampswebsync.py: line 232: Moving to next page from page 1.
2026-07-15 14:57:07.283: DEBUG: grampswebsync.py: line 232: Moving to next page from page 2.
2026-07-15 14:57:07.285: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
2026-07-15 14:57:07.359: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
2026-07-15 14:57:07.665: DEBUG: grampswebsync.py: line 232: Moving to next page from page 2.
2026-07-15 14:57:07.672: INFO: grampswebsync.py: line 514: Downloading Gramps XML file.
2026-07-15 14:57:09.558: DEBUG: grampswebsync.py: line 518: The file name of the downloaded file is: C:\\Users\\HANS_E\~1\\AppData\\Local\\Temp\\tmpaqke9n70.gramps
2026-07-15 14:57:09.560: DEBUG: grampswebsync.py: line 519: Importing Gramps XML file.
100%2026-07-15 14:57:13.553: DEBUG: grampswebsync.py: line 524: Successfully imported Gramps XML file.
2026-07-15 14:57:13.555: INFO: grampswebsync.py: line 528: Comparing local and remote data...
2026-07-15 14:57:13.555: DEBUG: grampswebsync.py: line 532: Loading last sync timestamp from config: 1761770964.360164 (2025-10-29 21:49:24 )
2026-07-15 14:57:16.076: DEBUG: diffhandler.py: line 87: Last synced timestamp from config: 1761770964.360164 (2025-10-29 21:49:24 )
2026-07-15 14:57:16.077: DEBUG: diffhandler.py: line 90: Latest common timestamp calculated: 1761766793 (2025-10-29 20:39:53 )
2026-07-15 14:57:16.077: DEBUG: diffhandler.py: line 97: Using last synced timestamp as cutoff: 1761770964 (2025-10-29 21:49:24 )
2026-07-15 14:57:16.175: DEBUG: diffhandler.py: line 236: === SYNC DECISION SUMMARY ===
2026-07-15 14:57:16.176: DEBUG: diffhandler.py: line 237: Cutoff timestamp used: 1761770964 (2025-10-29 21:49:24 )
2026-07-15 14:57:16.176: DEBUG: diffhandler.py: line 240: Added to local (remote objects): 16
2026-07-15 14:57:16.176: DEBUG: diffhandler.py: line 241: Added to remote (local objects): 0
2026-07-15 14:57:16.176: DEBUG: diffhandler.py: line 242: Deleted from local: 0
2026-07-15 14:57:16.177: DEBUG: diffhandler.py: line 243: Deleted from remote: 2
2026-07-15 14:57:16.177: DEBUG: diffhandler.py: line 244: Modified in local: 16
2026-07-15 14:57:16.178: DEBUG: diffhandler.py: line 245: Modified in remote: 0
2026-07-15 14:57:16.276: DEBUG: diffhandler.py: line 246: Modified in both: 371
2026-07-15 14:57:16.277: DEBUG: diffhandler.py: line 247: === END SUMMARY ===
2026-07-15 14:57:16.277: DEBUG: grampswebsync.py: line 232: Moving to next page from page 2.
2026-07-15 14:58:59.586: DEBUG: grampswebsync.py: line 232: Moving to next page from page 3.
2026-07-15 14:58:59.587: DEBUG: grampswebsync.py: line 232: Moving to next page from page 4.
2026-07-15 14:58:59.588: INFO: grampswebsync.py: line 651: Committing all changes to the databases.
2026-07-15 14:58:59.589: DEBUG: grampswebsync.py: line 658: No changes to apply to local database.
2026-07-15 14:58:59.790: DEBUG: webapihandler.py: line 151: Fetching metadata from the server
2026-07-15 14:59:00.044: DEBUG: grampswebsync.py: line 232: Moving to next page from page 4.
2026-07-15 14:59:00.054: DEBUG: grampswebsync.py: line 683: Committing changes to remote database.
2026-07-15 15:00:00.216: WARNING: grampswebsync.py: line 493: Fout 504 tijdens het verbinden met de server.
2026-07-15 15:00:00.216: DEBUG: grampswebsync.py: line 232: Moving to next page from page 4.
2026-07-15 15:00:00.216: DEBUG: grampswebsync.py: line 234: Skipping to last page due to error.
2026-07-15 15:00:23.746: DEBUG: grampswebsync.py: line 216: Closing Gramps Web Sync addon.
2026-07-15 15:00:23.747: DEBUG: grampswebsync.py: line 219: Closing in-memory remote database.
The dockerlog from this time-frame:
Gramps-Web
date,stream,content
2026/07/15 15:01:08,stderr, warnings.warn(
2026/07/15 15:01:08,stderr,/usr/local/lib/python3.11/dist-packages/flask_limiter/\_extension.py:364: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
2026/07/15 15:01:07,stderr,(gunicorn:6059): Gtk-CRITICAL \*\*: 13:01:07.036: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
2026/07/15 15:01:07,stderr,
2026/07/15 15:01:02,stderr,\[2026-07-15 13:01:02 +0000\] \[6059\] \[INFO\] Booting worker with pid: 6059
2026/07/15 15:01:02,stderr,\[2026-07-15 13:01:02 +0000\] \[27\] \[ERROR\] Worker (pid:28) was sent SIGKILL! Perhaps out of memory?
2026/07/15 15:01:01,stderr,\[2026-07-15 13:01:01 +0000\] \[28\] \[INFO\] Worker exiting (pid: 28)
2026/07/15 15:01:01,stderr,SystemExit: 1
2026/07/15 15:01:01,stderr, sys.exit(1)
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gunicorn/workers/base.py", line 204, in handle_abort
"
2026/07/15 15:01:01,stderr, dbapi_connection.commit()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/default.py", line 715, in do_commit
"
2026/07/15 15:01:01,stderr, self.engine.dialect.do_commit(self.connection)
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 1145, in \_commit_impl
"
2026/07/15 15:01:01,stderr, raise exc_info\[1\].with_traceback(exc_info\[2\])
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 2366, in \_handle_dbapi_exception
"
2026/07/15 15:01:01,stderr," self.\_handle_dbapi_exception(e, None, None, None, None)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 1147, in \_commit_impl
"
2026/07/15 15:01:01,stderr, self.connection.\_commit_impl()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 2716, in \_connection_commit_impl
"
2026/07/15 15:01:01,stderr, self.\_connection_commit_impl()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 2745, in \_do_commit
"
2026/07/15 15:01:01,stderr, self.\_do_commit()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/engine/base.py", line 2640, in commit
"
2026/07/15 15:01:01,stderr, trans.commit()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/orm/session.py", line 1318, in commit
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," ret_value = fn(self, \*arg, \*\*kw)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in \_go
"
2026/07/15 15:01:01,stderr," File "", line 2, in commit
"
2026/07/15 15:01:01,stderr, trans.commit(\_to_root=True)
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/sqlalchemy/orm/session.py", line 2030, in commit
"
2026/07/15 15:01:01,stderr, session.commit()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/undodb.py", line 283, in append
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, self.last = self.commitdb.append(
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps/gen/db/txn.py", line 193, in add
"
2026/07/15 15:01:01,stderr, trans.add(
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps/plugins/db/dbapi/dbapi.py", line 699, in \_commit_base
"
2026/07/15 15:01:01,stderr," self.\_commit_base(media, MEDIA_KEY, transaction, change_time)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps/gen/db/generic.py", line 2293, in commit_media
"
2026/07/15 15:01:01,stderr," com_func(obj, trans)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/tasks.py", line 577, in handle_commit
"
2026/07/15 15:01:01,stderr," handle_commit(trans, class_name, new_obj)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/tasks.py", line 524, in process_transactions
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," return self.run(\*args, \*\*kwargs)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/util/celery.py", line 18, in **call**
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," return self.\_get_current_object()(\*a, \*\*kw)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/celery/local.py", line 182, in **call**
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, return task(\*\*kwargs)
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/tasks.py", line 80, in run_task
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^
2026/07/15 15:01:01,stderr, task = run_task(
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/resources/transactions.py", line 63, in post
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," return func(\*args, \*\*kwargs)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/webargs/core.py", line 652, in wrapper
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, return current_app.ensure_sync(meth)(\*\*kwargs) # type: ignore\[no-any-return\]
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/views.py", line 191, in dispatch_request
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, return current_app.ensure_sync(self.dispatch_request)(\*\*kwargs) # type: ignore\[no-any-return\]
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/views.py", line 110, in view
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," return func(\*args, \*\*kwargs)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/auth.py", line 44, in wrapper
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, return self.ensure_sync(self.view_functions\[rule.endpoint\])(\*\*view_args) # type: ignore\[no-any-return\]
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 902, in dispatch_request
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, rv = self.dispatch_request()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 917, in full_dispatch_request
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr, response = self.full_dispatch_request()
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 1511, in wsgi_app
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," return self.wsgi_app(environ, start_response)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 1536, in **call**
"
2026/07/15 15:01:01,stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026/07/15 15:01:01,stderr," respiter = self.wsgi(environ, resp.start_response)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gunicorn/workers/sync.py", line 177, in handle_request
"
2026/07/15 15:01:01,stderr," self.handle_request(listener, req, client, addr)
"
2026/07/15 15:01:01,stderr," File "/usr/local/lib/python3.11/dist-packages/gunicorn/workers/sync.py", line 134, in handle
"
2026/07/15 15:01:01,stderr,Traceback (most recent call last):
2026/07/15 15:01:01,stderr,\[2026-07-15 13:01:01 +0000\] \[28\] \[ERROR\] Error handling request /api/transactions/?force=1&background=1
2026/07/15 15:01:01,stderr,\[2026-07-15 13:01:01 +0000\] \[27\] \[CRITICAL\] WORKER TIMEOUT (pid:28)