7

Google App Engine にデプロイする Google Web Toolkit アプリケーションがあります。デプロイされたアプリケーションで、JavaScript エラーが発生しますUncaught TypeError: Cannot read property 'f' of null。これは Java NullPointerException に相当する JavaScript のように思えます。

問題は、GWT JavaScript が難読化されているため、ブラウザーでデバッグすることが不可能であり、Java デバッガーを使用できるホスト モードで同じ問題を再現できないことです。デプロイされたアプリケーションでのみエラーが表示される理由は、GAE サーバーで使用しているデータベースが、テストおよび開発中に使用しているテスト データベースとは異なる方法で何かをトリガーしているためだと思います。

それで、続行するための最良の方法についてのアイデアはありますか?私は次のことを考えました:

  • アプリケーションの難読化されていないバージョンをデプロイします。多くのグーグル検索にもかかわらず、Google Eclipse プラグインで提供される自動デプロイ スクリプトを使用してこれを行う方法がわかりません。誰か知っていますか?
  • GAE データをローカル サーバーにダウンロードしてコピーする
  • どういうわけか、ローカルのテスト データベースではなく、データに GAE サーバーを使用するように開発コードを指定します。これは最高のアイデアのようです...

誰でもここで進める方法を提案できますか?

最後に、本番サーバーでこれらの JavaScript エラーをキャッチしてどこかに記録する方法はありますか? ログを記録しないと、サーバー上で発生しないエラーがユーザーに発生しているかどうかを知ることはできません。GWT.log() 関数は、本番コードから自動的に取り除かれます...

4

1 に答える 1

4

1) GAE データベースの必要な状態をローカルに複製できる場合は、ローカル マシンで JavaScript コンパイル済みバージョンを実行します。これによりほぼ確実に同じエラーが発生しますが、AppEngine を完全にデプロイするよりもはるかに安価です。これを行うには、アプリを GWT コンパイラーでコンパイルし、通常どおりに起動してから、ブラウザーでその?gwt.codesvr=127.0.0.1:9997部分を除いて指定されたアドレスにポイントします。

2)-style PRETTYまたは-style DETAILEDを GWT コンパイラと共に使用して、より適切な JavaScript を取得します。このフラグを使用して一度ローカルでコンパイルすると、(Eclipse プラグインを使用して) AppEngine にデプロイすると、難読化されていない同じバージョンが送信されます。

Window.alert()3)エラーが発生した場所を正確に把握するために、コードをインストルメント化します(正常に動作します)。これは、JavaScript の実行がホスト モードの実行から逸脱している場所を見つけるのに特に役立ちます。

4) 順列を 1 つだけにして、コンパイル プロセスを高速化します。そこでこれを行う方法を参照してください: How do I speed up the gwt compiler?

5) 開発バージョンまたは単体テストで表示されない Javascript エラーは (ほとんどの場合) GWT のバグが原因です。少し調べた後、GWT フォーラムまたは問題トラッカーに立ち寄って、既知のバグと回避策があるかどうか。

于 2010-04-14T20:15:07.190 に答える