0

我将 Heroku 与 Django 一起使用,并将 Piston 用于 API 的东西。

我们从普通的 Amazon EC2 迁移到 Heroku。除了一些 API 调用外,一切正常(网站的各个方面)。

当我运行 API 调用以获取用户拥有的对象(树)列表时,我得到以下信息:

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

任何人都知道为什么会这样?在此先感谢,我非常感谢任何提示/建议!

4

2 回答 2

1

这是一个棘手的调试问题。原来问题在于 Heroku dynos 看不到对方的临时目录。这意味着在迁移到 Heroku 之后,即使我们将文件写入临时目录,当我们安排一个任务来处理该文件时,该文件也会神秘地不存在。我们通过将文件直接写入 S3(而不是使用临时目录)解决了这个问题。

此外,Piston 的新版本对数据库架构进行了更改,因此请确保更新正确!

于 2012-04-22T04:37:20.873 回答
0

这基本上意味着您的三个有点过于结构化,并且解码它的函数(递归)超过了递归调用的最大深度限制(例如,递归深度 = 3 的示例是调用函数的函数,调用另一个函数,它调用另一个函数)。如果您使用自定义算法来解码 json,只需确保从递归方法切换到迭代方法(可以通过许多实现提示的算法来完成)。尝试查看递归操作的限制:

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

如果您对它不满意,请按如下方式更改:

>>> sys.setrecursionlimit(...)

避免设置为高数字,因为它们可能会使您的系统崩溃;我敢打赌,heroku 以某种方式限制了最大深度递归。

于 2012-04-14T08:51:24.250 回答