dokku的芹菜没有看到sqlite记录

2024-06-07 05:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的堆栈是:Django,芹菜(Redis broker),Dokku

我的代码将记录放入sqlite数据库,并将任务放入芹菜:

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

现在我需要从芹菜任务中的sqlite数据库中获取这个对象。但在芹菜任务流程中,我看不到记录:

@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_状态时,我得到了“QUEUE”状态。 看起来Django和芹菜流程有不同的容器或不同的数据库。 我已经检查了connection.settings\u dict['NAME'],对于Django和芹菜进程,它返回相同的“/app/db.sqlite3”值

这个没有Dokku的代码很好用,但是现在我需要它和Dokku一起使用。 为什么芹菜在sqlite数据库中看不到记录? 它实际上是同一个数据库吗?也许我需要像承诺这样的东西?(我使用Django保存方法) 我怎么能修好它


Tags: django代码id数据库packagetasksqliteget
1条回答
网友
1楼 · 发布于 2024-06-07 05:05:27

我通过在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/

相关问题 更多 >