InvenTree: Fail to start after an update

Deployment Method

  • Installer
  • Docker Development
  • Docker Production
  • Bare metal Development
  • Bare metal Production
  • Digital Ocean image
  • Other (please provide a link Steps to Reproduce

Describe the problem*

After a recent update to a docker devel install (docker-compose pull, docker-compose run inventree-server invoke update) InvenTree fails to start at all. I’ve got a pretty long stream of errors coming out of things here and not really sure what to make of them.

Steps to Reproduce

  1. Upgrade: docker-compose pull, docker-compose up -d, docker-compose run inventree-server invoke update
  2. Start inventree using docker-compose up and watch the log.

Relevant log output

Starting inventree-db ... done
Starting inventree-server ... done
Starting inventree-worker ... done
Starting inventree-proxy  ... done
Attaching to inventree-db, inventree-server, inventree-proxy, inventree-worker
inventree-db        |
inventree-db        | PostgreSQL Database directory appears to contain a database; Skipping initialization
inventree-db        |
inventree-db        | 2023-03-26 05:44:34.502 UTC [1] LOG:  starting PostgreSQL 13.10 (Debian 13.10-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
inventree-db        | 2023-03-26 05:44:34.502 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
inventree-db        | 2023-03-26 05:44:34.502 UTC [1] LOG:  listening on IPv6 address "::", port 5432
inventree-db        | 2023-03-26 05:44:34.505 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
inventree-db        | 2023-03-26 05:44:34.523 UTC [29] LOG:  database system was shut down at 2023-03-26 05:40:52 UTC
inventree-db        | 2023-03-26 05:44:34.530 UTC [1] LOG:  database system is ready to accept connections
inventree-proxy     | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
inventree-proxy     | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
inventree-proxy     | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
inventree-proxy     | 10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)
inventree-proxy     | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
inventree-proxy     | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
inventree-proxy     | /docker-entrypoint.sh: Configuration complete; ready for start up
inventree-server    | Loading config file : /home/inventree/data/config.yaml
inventree-worker    | Loading config file : /home/inventree/data/config.yaml
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: using the "epoll" event method
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: nginx/1.22.1
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: OS: Linux 5.10.0-21-amd64
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: start worker processes
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: start worker process 24
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: start worker process 25
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: start worker process 26
inventree-proxy     | 2023/03/26 05:44:35 [notice] 1#1: start worker process 27
inventree-db        | 2023-03-26 05:44:39.237 UTC [36] ERROR:  column part_bomitem.metadata does not exist at character 29
inventree-db        | 2023-03-26 05:44:39.237 UTC [36] STATEMENT:  SELECT "part_bomitem"."id", "part_bomitem"."metadata", "part_bomitem"."part_id", "part_bomitem"."sub_part_id", "part_bomitem"."quantity", "part_bomitem"."optional", "part_bomitem"."consumable", "part_bomitem"."overage", "part_bomitem"."reference", "part_bomitem"."note", "part_bomitem"."checksum", "part_bomitem"."validated", "part_bomitem"."inherited", "part_bomitem"."allow_variants" FROM "part_bomitem" INNER JOIN "part_part" ON ("part_bomitem"."part_id" = "part_part"."id") INNER JOIN "part_part" T3 ON ("part_bomitem"."sub_part_id" = T3."id") WHERE (NOT "part_part"."trackable" AND T3."trackable")
inventree-db        | 2023-03-26 05:44:39.445 UTC [37] ERROR:  column part_bomitem.metadata does not exist at character 29
inventree-db        | 2023-03-26 05:44:39.445 UTC [37] STATEMENT:  SELECT "part_bomitem"."id", "part_bomitem"."metadata", "part_bomitem"."part_id", "part_bomitem"."sub_part_id", "part_bomitem"."quantity", "part_bomitem"."optional", "part_bomitem"."consumable", "part_bomitem"."overage", "part_bomitem"."reference", "part_bomitem"."note", "part_bomitem"."checksum", "part_bomitem"."validated", "part_bomitem"."inherited", "part_bomitem"."allow_variants" FROM "part_bomitem" INNER JOIN "part_part" ON ("part_bomitem"."part_id" = "part_part"."id") INNER JOIN "part_part" T3 ON ("part_bomitem"."sub_part_id" = T3."id") WHERE (NOT "part_part"."trackable" AND T3."trackable")
inventree-db        | 2023-03-26 05:44:39.506 UTC [38] ERROR:  column part_bomitem.metadata does not exist at character 29
inventree-db        | 2023-03-26 05:44:39.506 UTC [38] STATEMENT:  SELECT "part_bomitem"."id", "part_bomitem"."metadata", "part_bomitem"."part_id", "part_bomitem"."sub_part_id", "part_bomitem"."quantity", "part_bomitem"."optional", "part_bomitem"."consumable", "part_bomitem"."overage", "part_bomitem"."reference", "part_bomitem"."note", "part_bomitem"."checksum", "part_bomitem"."validated", "part_bomitem"."inherited", "part_bomitem"."allow_variants" FROM "part_bomitem" INNER JOIN "part_part" ON ("part_bomitem"."part_id" = "part_part"."id") INNER JOIN "part_part" T3 ON ("part_bomitem"."sub_part_id" = T3."id") WHERE (NOT "part_part"."trackable" AND T3."trackable")
inventree-db        | 2023-03-26 05:44:39.725 UTC [39] ERROR:  column part_bomitem.metadata does not exist at character 29
inventree-db        | 2023-03-26 05:44:39.725 UTC [39] STATEMENT:  SELECT "part_bomitem"."id", "part_bomitem"."metadata", "part_bomitem"."part_id", "part_bomitem"."sub_part_id", "part_bomitem"."quantity", "part_bomitem"."optional", "part_bomitem"."consumable", "part_bomitem"."overage", "part_bomitem"."reference", "part_bomitem"."note", "part_bomitem"."checksum", "part_bomitem"."validated", "part_bomitem"."inherited", "part_bomitem"."allow_variants" FROM "part_bomitem" INNER JOIN "part_part" ON ("part_bomitem"."part_id" = "part_part"."id") INNER JOIN "part_part" T3 ON ("part_bomitem"."sub_part_id" = T3."id") WHERE (NOT "part_part"."trackable" AND T3."trackable")
inventree-worker    | Waiting for database...
inventree-server    | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
inventree-server    | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
inventree-server    | [2023-03-26 05:44:41 +0000] [11] [ERROR] Exception in worker process
inventree-server    | Traceback (most recent call last):
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
inventree-server    |     worker.init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
inventree-server    |     super().init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
inventree-server    |     self.load_wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
inventree-server    |     self.wsgi = self.app.wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
inventree-server    |     self.callable = self.load()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
inventree-server    |     return self.load_wsgiapp()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
inventree-server    |     return util.import_app(self.app_uri)
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
inventree-server    |     mod = importlib.import_module(module)
inventree-server    |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
inventree-server    |     return _bootstrap._gcd_import(name[level:], package, level)
inventree-server    |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
inventree-server    |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
inventree-server    |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap_external>", line 850, in exec_module
inventree-server    |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
inventree-server    |   File "/home/inventree/InvenTree/InvenTree/wsgi.py", line 15, in <module>
inventree-server    |     application = get_wsgi_application()  # pragma: no cover
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
inventree-server    |     django.setup(set_prefix=False)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
inventree-server    |     apps.populate(settings.INSTALLED_APPS)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate
inventree-server    |     app_config.ready()
inventree-server    |   File "/home/inventree/InvenTree/plugin/apps.py", line 45, in ready
inventree-server    |     registry.load_plugins()
inventree-server    |   File "/home/inventree/InvenTree/plugin/registry.py", line 115, in load_plugins
inventree-server    |     _maintenance = bool(get_maintenance_mode())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/core.py", line 42, in get_maintenance_mode
inventree-server    |     return backend.get_value()
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 66, in get_value
inventree-server    |     return self.from_str_to_bool_value(statefile.read())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 21, in from_str_to_bool_value
inventree-server    |     raise ValueError("state value is not 0|1")
inventree-server    | ValueError: state value is not 0|1
inventree-server    | [2023-03-26 05:44:41 +0000] [12] [ERROR] Exception in worker process
inventree-server    | Traceback (most recent call last):
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
inventree-server    |     worker.init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
inventree-server    |     super().init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
inventree-server    |     self.load_wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
inventree-server    |     self.wsgi = self.app.wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
inventree-server    |     self.callable = self.load()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
inventree-server    |     return self.load_wsgiapp()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
inventree-server    |     return util.import_app(self.app_uri)
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
inventree-server    |     mod = importlib.import_module(module)
inventree-server    |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
inventree-server    |     return _bootstrap._gcd_import(name[level:], package, level)
inventree-server    |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
inventree-server    |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
inventree-server    |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap_external>", line 850, in exec_module
inventree-server    |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
inventree-server    |   File "/home/inventree/InvenTree/InvenTree/wsgi.py", line 15, in <module>
inventree-server    |     application = get_wsgi_application()  # pragma: no cover
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
inventree-server    |     django.setup(set_prefix=False)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
inventree-server    |     apps.populate(settings.INSTALLED_APPS)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate
inventree-server    |     app_config.ready()
inventree-server    |   File "/home/inventree/InvenTree/plugin/apps.py", line 45, in ready
inventree-server    |     registry.load_plugins()
inventree-server    |   File "/home/inventree/InvenTree/plugin/registry.py", line 115, in load_plugins
inventree-server    |     _maintenance = bool(get_maintenance_mode())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/core.py", line 42, in get_maintenance_mode
inventree-server    |     return backend.get_value()
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 66, in get_value
inventree-server    |     return self.from_str_to_bool_value(statefile.read())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 21, in from_str_to_bool_value
inventree-server    |     raise ValueError("state value is not 0|1")
inventree-server    | ValueError: state value is not 0|1
inventree-server    | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
inventree-server    | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
inventree-server    | [2023-03-26 05:44:42 +0000] [10] [ERROR] Exception in worker process
inventree-server    | Traceback (most recent call last):
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
inventree-server    |     worker.init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
inventree-server    |     super().init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
inventree-server    |     self.load_wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
inventree-server    |     self.wsgi = self.app.wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
inventree-server    |     self.callable = self.load()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
inventree-server    |     return self.load_wsgiapp()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
inventree-server    |     return util.import_app(self.app_uri)
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
inventree-server    |     mod = importlib.import_module(module)
inventree-server    |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
inventree-server    |     return _bootstrap._gcd_import(name[level:], package, level)
inventree-server    |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
inventree-server    |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
inventree-server    |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap_external>", line 850, in exec_module
inventree-server    |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
inventree-server    |   File "/home/inventree/InvenTree/InvenTree/wsgi.py", line 15, in <module>
inventree-server    |     application = get_wsgi_application()  # pragma: no cover
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
inventree-server    |     django.setup(set_prefix=False)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
inventree-server    |     apps.populate(settings.INSTALLED_APPS)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate
inventree-server    |     app_config.ready()
inventree-server    |   File "/home/inventree/InvenTree/plugin/apps.py", line 45, in ready
inventree-server    |     registry.load_plugins()
inventree-server    |   File "/home/inventree/InvenTree/plugin/registry.py", line 115, in load_plugins
inventree-server    |     _maintenance = bool(get_maintenance_mode())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/core.py", line 42, in get_maintenance_mode
inventree-server    |     return backend.get_value()
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 66, in get_value
inventree-server    |     return self.from_str_to_bool_value(statefile.read())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 21, in from_str_to_bool_value
inventree-server    |     raise ValueError("state value is not 0|1")
inventree-server    | ValueError: state value is not 0|1
inventree-server    | [2023-03-26 05:44:42 +0000] [13] [ERROR] Exception in worker process
inventree-server    | Traceback (most recent call last):
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
inventree-server    |     worker.init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
inventree-server    |     super().init_process()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
inventree-server    |     self.load_wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
inventree-server    |     self.wsgi = self.app.wsgi()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
inventree-server    |     self.callable = self.load()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
inventree-server    |     return self.load_wsgiapp()
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
inventree-server    |     return util.import_app(self.app_uri)
inventree-server    |   File "/usr/local/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
inventree-server    |     mod = importlib.import_module(module)
inventree-server    |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
inventree-server    |     return _bootstrap._gcd_import(name[level:], package, level)
inventree-server    |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
inventree-server    |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
inventree-server    |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
inventree-server    |   File "<frozen importlib._bootstrap_external>", line 850, in exec_module
inventree-server    |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
inventree-server    |   File "/home/inventree/InvenTree/InvenTree/wsgi.py", line 15, in <module>
inventree-server    |     application = get_wsgi_application()  # pragma: no cover
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
inventree-server    |     django.setup(set_prefix=False)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
inventree-server    |     apps.populate(settings.INSTALLED_APPS)
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate
inventree-server    |     app_config.ready()
inventree-server    |   File "/home/inventree/InvenTree/plugin/apps.py", line 45, in ready
inventree-server    |     registry.load_plugins()
inventree-server    |   File "/home/inventree/InvenTree/plugin/registry.py", line 115, in load_plugins
inventree-server    |     _maintenance = bool(get_maintenance_mode())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/core.py", line 42, in get_maintenance_mode
inventree-server    |     return backend.get_value()
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 66, in get_value
inventree-server    |     return self.from_str_to_bool_value(statefile.read())
inventree-server    |   File "/root/.local/lib/python3.9/site-packages/maintenance_mode/backends.py", line 21, in from_str_to_bool_value
inventree-server    |     raise ValueError("state value is not 0|1")
inventree-server    | ValueError: state value is not 0|1
inventree-server    | [2023-03-26 05:44:42 +0000] [9] [WARNING] Worker with pid 13 was terminated due to signal 15
inventree-server    | [2023-03-26 05:44:42 +0000] [9] [WARNING] Worker with pid 12 was terminated due to signal 15
inventree-server    | [2023-03-26 05:44:42 +0000] [9] [WARNING] Worker with pid 10 was terminated due to signal 15

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 16 (5 by maintainers)

Most upvoted comments

A sorry, I thought of another project. InvenTree has the export-records function putting out json, the rest of the sentence is correct.

I just tried running invoke backup followed by invoke restore just to make sure the restore mechanism worked at all, and it does. Which I guess would point to the backups themselves being damaged? But I’m very skeptical of that - they are from a time when the system was working fine, and the json dump is from the same time, and it imports ok.