django-tasks icon indicating copy to clipboard operation
django-tasks copied to clipboard

Specify which database backend to use

Open RealOrangeOne opened this issue 1 year ago • 7 comments
trafficstars

It's currently not possible to specify which database backend will be used (ie the ones configured in DATABASES). Especially for SQLite, it's useful to separate the queue tables into a separate database.

RealOrangeOne avatar Jun 08 '24 15:06 RealOrangeOne

Hey is this still open and unassigned?

turingnixstyx avatar Jul 25 '24 06:07 turingnixstyx

Yes. If you're interested in working on it, by all means do. I don't assign issues to people specifically though - anyone can work on anything.

RealOrangeOne avatar Jul 25 '24 08:07 RealOrangeOne

@RealOrangeOne if this needs to be implemented, can we just add database in the following tasks config if we are using DatabaseBackend and set the default to default database defined in settings and then have all task related models to use the database defined in tasks config dict.

TASKS = {
    "default": {
        "BACKEND": "django_tasks.backends.immediate.ImmediateBackend",
        "DATABASE": "name_of_the_database" i.e. "tasks_db" # if not set use the default
    }
}

or are we looking for a more sophisticated solution than this option.

fazeelghafoor avatar Jul 29 '24 02:07 fazeelghafoor

I think it'll need something a little more complex than this, as both the worker and migrations need to use this value. It might be that a database router is the only way to implement this, in which case there's not much to do ourselves besides ensure the correct DB is specified when needed.

RealOrangeOne avatar Jul 29 '24 07:07 RealOrangeOne

Since it's something specific to the DatabaseBackend, it feels like it should reside inside an OPTIONS key:

TASKS = {
    "default": {
        "BACKEND": "django_tasks.backends.database.DatabaseBackend",
        "OPTIONS": {
            "alias": "tasks_db"
        }
}

hartungstenio avatar Oct 29 '24 12:10 hartungstenio

I think a better way to handle this would be using a database router. I don't think one should be included, but at least documenting how to write one would be ideal. Exactly how multiple installed database backends would be handled I don't know.

RealOrangeOne avatar Nov 29 '24 16:11 RealOrangeOne

Hi @RealOrangeOne , I have created a draft PR that attemps to solve the problem based on the above suggestions. Any suggestions would be helpful - https://github.com/RealOrangeOne/django-tasks/pull/122.

grandimam avatar Nov 29 '24 21:11 grandimam