2010-04-14 9 views
6

Mam aplikację Google Web Toolkit, którą wdrażam w Google App Engine. W wdrożonej aplikacji otrzymuję błąd JavaScript Uncaught TypeError: Cannot read property 'f' of null. Brzmi to jak odpowiednik JavaScript NullPointerException Java.Debugowanie aplikacji Google Web Toolkit z błędem po wdrożeniu w Google App Engine

Problem polega na tym, że JavaScript GWT jest zaciemniony, więc nie można debugować w przeglądarce i nie mogę odtworzyć tego samego problemu w trybie hostowanym, w którym mógłbym używać debugera Java. Myślę, że powodem, dla którego widzę błąd tylko w wdrożonej aplikacji, jest to, że baza danych, której używam na serwerze GAE, uruchamia coś innego niż testowa baza danych, której używam podczas testowania i programowania.

Jakie są więc pomysły na najlepszy sposób postępowania? Zastanowiłem się nad następującymi rzeczami:

  • Wdróż niezastrzeżoną wersję mojej aplikacji. Pomimo wielu Googling nie mogę się dowiedzieć, jak to zrobić, korzystając z automatycznego skryptu wdrażania dostarczonego z wtyczką Google Eclipse. Czy ktoś wie?
  • Pobierz i skopiuj moje dane GAE do lokalnego serwera
  • W jakiś sposób wskaż mój kod rozwojowy, aby używać serwera GAE dla danych zamiast lokalnej testowej bazy danych. To wydaje się być najlepszym pomysłem ...

Czy ktoś może sugerować, jak przejść tutaj?

Wreszcie, czy istnieje sposób, aby złapać te błędy JavaScript na serwerze produkcyjnym i zalogować je gdzieś? Bez logowania się nie będę wiedział, czy moi użytkownicy mają błędy, które nie występują na serwerze. Funkcja GWT.log() jest automatycznie usuwana z kodu produkcyjnego ...

Odpowiedz

3

1) Jeśli możesz replikować lokalnie wymagany stan swojej bazy danych GAE, uruchom wersję skompilowaną na javascript na komputerze lokalnym. To prawie na pewno spowoduje ten sam błąd, ale jest o wiele tańsze niż pełne wdrożenie AppEngine. Zrób to, kompilując swoją aplikację z kompilatorem GWT, a następnie uruchom ją normalnie, a następnie skieruj przeglądarkę na podany adres bez części ?gwt.codesvr=127.0.0.1:9997.

2) Użyj -style PRETTY lub -style DETAILED z kompilatorem GWT, aby uzyskać ładniejszy javascript. Jeśli kompilujesz lokalnie z tą flagą tylko raz, wówczas wdrożenie do AppEngine (z wtyczką Eclipse) spowoduje wysłanie tej samej niezakodowanej wersji.

3) Ustaw swój kod (Window.alert() działa dobrze), aby dokładnie określić, gdzie wystąpił błąd. Jest to szczególnie przydatne w celu znalezienia miejsca, w którym wykonywanie javascript różni się od wykonywania w trybie hostowanym.

4) Przyspiesz proces kompilacji, zachowując tylko jedną permutację. Zobacz, jak to zrobić: How do I speed up the gwt compiler?

5) Błędy JavaScript, które nie pojawiają się w wersji rozwojowej lub testach jednostkowych, są (prawie zawsze) spowodowane błędem w GWT, po tym, jak zbadałeś trochę , upuść na forum GWT lub tracker problemów i sprawdź, czy to znany błąd i czy istnieje obejście.