4

先日、新しいプロジェクトのために web2py をいじり始めました。PHP フレームワークで数年を過ごした後、新鮮な空気の息吹のように感じる構造と全体のコンセプトが本当に気に入っています。

(現在)私を悩ませている唯一のものはチケットシステムです. 間違いを犯すたびに、チケットへのリンクを含むページが表示されます。リンクが機能していれば、それでうまくいくと思います。現在、プロトコルとして https ではなく http を使用する管理ページを指しています。少し読んだことがありますが、管理者に https を強制するのはセキュリティ対策のようですが、これによりデバッグが面倒になります。

ここでの標準的な解決策は何ですか? エラー ページを変更し、管理者に http を許可し、ログをデバッグに使用しますか?

よろしくフレドリック

4

2 に答える 2

4

私はあなたと同じ船に乗っていました。デフォルトのメカニズムが好きではありませんでした。幸いなことに、web2py でカスタマイズされた例外処理は非常に簡単です。web2py ディレクトリのルートにある routes.py を見てください。私は私のものに以下を追加しました:

routes_onerror = [('application_name/*','/application_name/error/index')]

これにより、def インデックスを次のように定義したエラー ハンドラー コントローラー (application_name/controllers/error.py) に例外がルーティングされます。

def index():
    if request.vars.code == '400':
        return(dict(app=request.application,
            ticket=None,
            traceback="A 400 error was raised, this is controller/method path not found",
            code=None,
            layer=None,
            wasEmailed=False))
    elif request.vars.code == '404':
        return(dict(app=request.application,
            ticket=None,
            traceback="A 404 error was raised, this is bad.",
            code=None,
            layer=None,
            wasEmailed=False))  
    else:
        fH = file('applications/%s/errors/%s' % (request.application,request.vars.ticket.split("/")[1]))
        e = cPickle.load(fH)
            fH.close()
            __sendEmail(request.application,e['layer'],e['traceback'],e['code'])
        return(dict(app=request.application,
            ticket=request.vars.ticket,
            traceback=e['traceback'],
            code=e['code'],
            layer=e['layer'],
            wasEmailed=True))

400 以外のエラーと 404 エラーでわかるように、トレースバックを自分宛てにメールで送信し、対応するビュー/エラー/index.html を呼び出しています。本番環境では、このビューは一般的な「エラーが発生して申し訳ありません。開発者にメールを送信しました」というメッセージを表示します。私の開発サーバーでは、フォーマットされたトレースバックが表示されます。

于 2010-08-17T18:46:53.997 に答える
0

通常、私はhttp://127.0.0.1/ (ローカルまたは ssh 経由の場合) を使用するか、https:// を使用して編集/ナビゲートします...

そのため、最初に管理アプリにログオンしますが、その後は常にチケットが表示されます。

于 2010-08-18T22:29:38.533 に答える