diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 16e634e023..a04148c040 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -331,6 +331,11 @@ class InvenTreeConfig(AppConfig): if MIGRATIONS_CHECK_DONE: return + # Exit early if we are not in a state where we can access the database, + # otherwise we might end up in a deadlock situation + if not InvenTree.ready.canAppAccessDatabase(): + return + if not InvenTree.tasks.check_for_migrations(): # Detect if this an empty database - if so, start with a fresh migration if ( diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 0ab4205963..f5b207e805 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -587,6 +587,12 @@ def update_exchange_rates(force: bool = False): Arguments: force: If True, force the update to run regardless of the last update time """ + from InvenTree.ready import canAppAccessDatabase + + # Do not update exchange rates if we cannot access the database + if not canAppAccessDatabase(allow_test=True, allow_shell=True): + return + try: from djmoney.contrib.exchange.models import Rate diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index c721d8c346..d1d8763461 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -44,6 +44,13 @@ def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): def set_global_setting(key, value, change_user=None, create=True, **kwargs): """Set the value of a global setting using the provided key.""" from common.models import InvenTreeSetting + from InvenTree.ready import canAppAccessDatabase + + if not canAppAccessDatabase(allow_shell=True, allow_test=True): + logger.warning( + f'Cannot set global setting "{key}" - database is not accessible' + ) + return False kwargs['change_user'] = change_user kwargs['create'] = create