Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多库芹菜不好吃';我看不到sqlite记录_Python_Django_Sqlite_Celery_Dokku - Fatal编程技术网

Python 多库芹菜不好吃';我看不到sqlite记录

Python 多库芹菜不好吃';我看不到sqlite记录,python,django,sqlite,celery,dokku,Python,Django,Sqlite,Celery,Dokku,我的堆栈是: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 re

我的堆栈是: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保存方法)
如何修复它?

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

“看起来Django和芹菜流程有不同的容器或不同的数据库”——这很可能。我知道它在Heroku上是这样的,这激发了Dokku的灵感。SQLite对于现代容器化托管来说是一个糟糕的数据库选择。请使用适当的客户端服务器数据库,如PostgreSQL。是否使用事务将数据保存到数据库中?不,我不使用sqlite事务。