-
-
Notifications
You must be signed in to change notification settings - Fork 816
Description
Hi,
the fix for #2176 is not working for us.
Django: 5.2.6
Channels: 4.3.1
Daphne: 4.2.1
Python: 3.13.5
What we currently know:
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["NAME"] = "foo"
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["TEST"]["NAME"] = None
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["NAME"] = "test_foo"
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["TEST"]["NAME"] = None
for the following database settings:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"HOST": "localhost",
"NAME": "foo",
"USER": "foo",
"PASSWORD": "foo",
}
}
and
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["NAME"] = "foo"
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["TEST"]["NAME"] = "test_foo"
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["NAME"] = "test_foo"
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["TEST"]["NAME"] = "test_foo"
for the following database settings:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"HOST": "localhost",
"NAME": "foo",
"USER": "foo",
"PASSWORD": "foo",
"TEST": {
"NAME": "test_foo",
},
}
}
Out fix from #2178 now results in a database name test_test_foo
for if no test database name was given and for the fork
method. The error is:
django.db.utils.OperationalError: connection failed: connection to server at "127.0.0.1", port 5432 failed: FATAL: database "test_test_foo" does not exist
Multiple connection attempts failed. All failures were:
- host: 'localhost', port: None, hostaddr: '::1': connection failed: connection to server at "::1", port 5432 failed: FATAL: database "test_test_foo" does not exist
- host: 'localhost', port: None, hostaddr: '127.0.0.1': connection failed: connection to server at "127.0.0.1", port 5432 failed: FATAL: database "test_test_foo" does not exist
ERROR
We think that multiprocessing.get_start_method()
should be used to differentiate between both cases. What do you think?
channels/channels/testing/live.py
Lines 22 to 29 in f726845
def set_database_connection(): | |
from django.conf import settings | |
test_db_name = settings.DATABASES["default"]["TEST"]["NAME"] | |
if not test_db_name: | |
test_db_name = TEST_DATABASE_PREFIX + settings.DATABASES["default"]["NAME"] | |
settings.DATABASES["default"]["NAME"] = test_db_name | |
should be something like this:
def set_database_connection():
from django.conf import settings
test_db_name = settings.DATABASES["default"]["TEST"]["NAME"]
if not test_db_name and multiprocessing.get_start_method() == "spawn":
test_db_name = TEST_DATABASE_PREFIX + settings.DATABASES["default"]["NAME"]
settings.DATABASES["default"]["NAME"] = test_db_name