【问题标题】:Heroku + Django + PistonHeroku + Django + 活塞
【发布时间】:2012-04-26 08:16:39
【问题描述】:

我将 Heroku 与 Django 一起使用,并将 Piston 用于 API 内容。

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

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

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

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

【问题讨论】:

  • 我发现这篇文章似乎指向了我遇到的相同问题 ForeignKey 发射器递归可能是无限的并且会导致 python 崩溃 bitbucket.org/jespern/django-piston/issue/164/…
  • 我收到了 Heroku 支持的回复,他们说他们将标准递归限制设置为 1000。他们不知道 Piston 和 Heroku 之间有任何不兼容性。

标签: django rest amazon-web-services heroku django-piston


【解决方案1】:

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

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

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

>>> sys.setrecursionlimit(...)

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

【讨论】:

  • 这似乎与递归限制无关。即使增加了限制,我仍然遇到同样的问题。感谢您的建议
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多