2012-04-13 74 views
0

我使用Heroku和Django並使用活塞API。Heroku + Django +活塞

我們從普通的Amazon EC2遷移到Heroku。除了一些API調用之外,一切都有效(網站的每個方面)。

當我運行一個API調用來獲取對象(樹)該用戶擁有的列表,我得到如下:

RuntimeError at /api/tree.json 
maximum recursion depth exceeded while calling a Python object 

任何人都有的,爲什麼這可能是什麼想法? 在此先感謝,我真的很感激任何提示/建議!

+0

我發現這篇文章似乎指向我正在發生的同樣的問題** ForeignKey發射器遞歸可以是無限的並且崩潰python ** https://bitbucket.org/jespern/django-piston/issue/164/foreignkey -emitter-recursion-can-be – Alexandre 2012-04-16 17:44:01

+0

我收到了Heroku支持的回覆,他們說他們將標準遞歸限制設置爲1000.他們不知道活塞與Heroku之間有任何不兼容。 – Alexandre 2012-04-16 18:16:03

回答

1

這是一個棘手的問題調試。原來,問題是Heroku dynos無法看到彼此的臨時目錄。這意味着,即使我們將文件寫入臨時目錄,在遷移到Heroku後,當我們安排處理該文件的任務時,該文件會神祕地不存在。我們通過將文件直接寫入S3(而不是使用臨時目錄)來解決這個問題。

另外,Piston的新版本有一個數據庫模式更改,所以請確保更新正確!

+0

https://devcenter.heroku.com/articles/dyno-isolation#ephemeral_filesystem – Alexandre 2012-04-23 05:15:38

0

這基本上意味着你的三個結構有點太過結構化,並且對它進行解碼的函數(遞歸的)超過遞歸調用的最大深度限制(例如遞歸深度= 3的示例是調用函數,調用另一個函數,調用另一個函數)。如果您使用自定義算法來解碼json,只需確保從遞歸方法切換到迭代方法(可以使用許多實現提示的算法完成)。試試,看看有什麼是你的遞歸操作的限制:

>>> import sys 
>>> sys.getrecursionlimit() 
1000 #on my mac but this is system dependent. 

如果你不滿意它更改如下:

>>> sys.setrecursionlimit(...) 

避免設置到高號碼,因爲它們可以造成系統崩潰;我敢打賭,Herku以某種方式限制了最大深度遞歸。

+0

這似乎並不像遞歸限制。即使增加限制後,我仍然遇到同樣的問題。感謝您的建議,但 – Alexandre 2012-04-16 17:43:28