2012-03-31 7 views
2

私のフラスコWebアプリケーションでは、セッション処理のためにビーカーライブラリを使用しています。次のコードでは、いくつかの未知の理由により、プロダクションサーバが例外を発生させますが、私のローカルPCは正常です。python try exceptすべてのエラーをキャプチャしません

import sys 

... 

try: 
    beaker_session = request.environ['beaker.session'] 
    beaker_session['user_id'] = user.id 
    beaker_session.save() 
except: 
    flash(sys.exc_info()[0]) 
    return render_template('main/login.html') 

ローカルコンピュータは、例外なく、期待どおりにセッションを保存します。 プロダクションサーバ(RedHat OpenShift)は "beaker_session.save()"行でエラーを発生させます。しかし、フラッシュメッセージでログインページを表示する代わりに、内部サーバーエラー500がスローされます。私はビーカーのバックエンドのURL(mysqlのデータベース)をチェックし、問題はありません。なぜなら、コードの他の部分、つまり新しく登録されたユーザーを永続させるためです。 私の質問は1)なぜ部分を除いてもうまくいかないのですか? 2)ビーカーがセッションを保存できない理由 ありがとうございます。

+6

場合 'except'一部が例外をキャッチさを=ここに一つ;おそらく 'except'ブロックで実行されているコードが*別の例外を引き起こしている可能性があります。サーバーのエラーログを調べて、500エラーになっている実際の例外が何であるかを調べます。 – Amber

+0

私はサーバーのログを調べる方法を見つけました(rhc app tail -a myapp)。問題はdirの許可です(ビーカーのlock_dirが設定されていません)。私はまだtry/exceptが動作しなかった理由を理解できませんでした。なぜなら、他のケースでは、私の例外部分が期待どおりに動作していたからです。 – synergetic

+0

@synergeticシステム割り込みやその他のシステム関連のエラーをキャッチして原因不明のエラーや奇妙なエラーにつながる可能性があるので、裸のもの以外は使用しないでください。 – codecool

答えて

0

私はビーカーライブラリに精通していませんが、SWIGラップされたライブラリであり、C++コード内の例外を除いて、例外を適切なPython例外にマッピングすることを無視した可能性があります。これが当てはまる場合、Pythonは例外時にショットを取得しません。そして試してみると、それを見逃してしまいます。デフォルトフラスコことで

0

例外を飲み込んだ、上部付近のアプリケーションに次の行を追加してください:

のapp.config [「PROPAGATE_EXCEPTIONS」]は真

関連する問題