2013-12-20 109 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是默認那裏。

相關問題