我的堆栈是: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文件解决了这个问题。并在应用程序设置中设置路径:
并为应用程序容器共享此目录:
相关问题 更多 >
编程相关推荐