2013-12-20 69 views
4

我已经遇到了一个非常糟糕的情况。我有以下设置。 我有一个Django模型代表一个有限状态机与django FSM fieldDjango模型不会保存到Celery中的数据库任务

我有一个芹菜任务,发出一封电子邮件,然后推进的主要对象FSM的状态。从芹菜任务的角度来看,物体“似乎”被保存下来。但是从主Django进程的角度来看,对象并没有被更新。奇怪的是,辅助对象正在被正确保存到数据库中,并且以后可以从主Django进程访问。

我明确地调用.save()从芹菜任务的对象,而date_last_modified = models.DateTimeField(auto_now=True, null=True)领域拥有比主线程的芹菜任务后的时间戳,虽然我不知道这是任何东西的指示,即它可能有已更新,但更新没有刷新到数据库。

我使用Django 1.5.1, 的PostgreSQL 9.3.0, 芹菜V3.1.0, 的Redis 2.6.10

运行芹菜,像这样 $ celery -A tracking worker -E -B -l info

的任何想法,为什么这可能是发生将不胜感激

回答

3

你重新得到对象后保存?即不只是看你在保存之前得到的实例吗?

1

交易情况如何?你可以尝试设置CELERY_EAGER_PROPAGATES_EXCEPTIONS=True和运行芹菜-l DEBUG看,是模型.save()调用之后的任何错误发生。

还拿并发更新的照顾。当一个进程读取模型时,然后芹菜读取并保存相同的模型,如果初始进程稍后调用models.save(),则它将覆盖其中的所有字段。

+2

并发更新是一个问题在我的情况下,安装https://django-save-the-change.readthedocs.org帮助。谢谢! –

1

我有类似的问题,Django的1.5

我想这是因为Django的不会立即更改提交到数据库。

添加

'OPTIONS': { 
     'autocommit': True 
    } 

DATABASES设置固定的问题对我来说。

问题在Django将不存在1.6+怎么一回事,因为autocommit是默认那里。

相关问题