dokku 中的 Celery 看不到 sqlite 记录

Celery in dokku doesn't see sqlite records

我的栈是:Django、Celery(Redis broker)、Dokku。

我的代码将记录放入 sqlite 数据库并为 Celery 放置任务:

package = Package.objects.get(pk=package_id)
package.download_status = 'QUEUE' # package is Django ORM object
package.save()

task_download_package.delay(package.id)  # put a task to redis for celery

现在我需要在 Celery 任务中从 sqlite 数据库中获取这个对象。但是在 Celery 任务进程里面我看不到记录:

@app.task(bind=True)
def task_download_package(self,
                          package_id: int):
    try:
        package = Package.objects.get(pk=package_id)
    except ObjectDoesNotExist:
        print("Package with pk={} not found".format(package_id))  # I HAVE GOT THIS MESSAGE
        return

但是当我通过我的特殊端点从 Django 进程请求 package.download_status 时,我得到了“QUEUE”状态。 看起来 Django 和 Celery 进程有不同的容器或不同的数据库。 我检查了 connection.settings_dict['NAME'] 并且它 return 与 Django 和 Celery 进程相同的“/app/db.sqlite3”值。

没有 Dokku 的这段代码工作正常,但现在我需要它与 Dokku。 为什么 Celery 在 sqlite 数据库中看不到记录? 它实际上是同一个数据库吗?可能我需要像 Commit 这样的东西? (我用的是Django的保存方式) 我该如何解决?

我已经通过在 Dokku 主机上的公共目录共享 db.sqlite3 文件解决了这个问题。并在应用设置中设置路径:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/home/my_user/my_company/my_app/database/db.sqlite3',
    }
}

并为应用程序容器共享此目录:

dokku storage:mount my_app /home/my_user/my_company/my_app/database/:/home/my_user/my_company/my_app/database/