0

私は Django で Heroku を使用し、API には Piston を使用しています。

プレーンな Amazon EC2 から Heroku に移行しました。一部の API 呼び出しを除いて、すべて (Web サイトのすべての側面) が機能します。

ユーザーが持っているオブジェクト (ツリー) のリストを取得する API 呼び出しを実行すると、次のようになります。

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

なぜこれが考えられるのか、誰にも考えがありますか?事前に感謝します。ヒントやアドバイスをいただければ幸いです。

4

2 に答える 2

1

これはデバッグが難しい問題でした。問題は、Heroku dyno が互いの一時ディレクトリを参照できないことにあることが判明しました。これは、一時ディレクトリにファイルを書き込んだにもかかわらず、Heroku に移行した後、そのファイルを処理するタスクをスケジュールしたときに、そのファイルが不思議なことに存在しないことを意味していました。この問題は、(一時ディレクトリを使用する代わりに) S3 にファイルを直接書き込むことで解決しました。

また、Piston の新しいバージョンではデータベース スキーマが変更されているため、正しく更新されていることを確認してください。

于 2012-04-22T04:37:20.873 に答える
0

これは基本的に、3 つが少し構造化されすぎており、それをデコードする関数 (再帰的) が再帰呼び出しの最大深度制限を超えていることを意味します (たとえば、再帰の深さ = 3 の例は、関数を呼び出す関数であり、別の関数を呼び出す別の関数)。カスタム アルゴリズムを使用して json をデコードしている場合は、再帰的アプローチから反復的アプローチに切り替えてください (キューを実装する多くのアルゴリズムで実行できます)。再帰操作の制限を確認してください。

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

満足できない場合は、次のように変更します。

>>> sys.setrecursionlimit(...)

システムがクラッシュする可能性があるため、大きな数値を設定しないでください。そして、herokuが最大深度の再帰を何らかの形で制限していると思います。

于 2012-04-14T08:51:24.250 に答える