2012-04-12 21 views
2

我有一個令我困惑的問題超過了一個星期。我有一個在Google App Engine上用Django編寫的項目。該項目有一個登錄頁面,當我在Google App Engine或命令行中使用dev_server.py c:\ project運行應用程序時,它工作正常。當我嘗試通過像Wing或Pycharm這樣的調試器運行應用程序時,我無法越過登錄頁面。嘗試登錄後,它又將我帶回登錄屏幕。當我查看日誌時,它在調試器中顯示302(重定向),但通常顯示200(OK)。有人可以解釋爲什麼會發生這種情況嗎?用於Google App Engine和Django的python中的調試器

感謝 -Dimitry

+0

這不是一個答案,但更多的是可能有用的問題。當我嘗試使用'ipdb'調試GAE應用程序時,它不起作用,而使用'pdb'則確實如此。可能與你的IDE使用的那種調試器有關? – 2012-04-12 12:57:25

回答

1

這是不是一個真正的偉大的答案,因爲我不知道很多關於翼或Pycharm。但dev_appserver將stdin和stdout重新路由到WSGI處理程序。如果你點擊了一個由pdb.set_trace()設置的斷點,斷點通常會讓你使用標準輸入/標準輸出的shell,但是對於dev_appserver,你會看到調試器的shell被傳送到你的HTTP,並且沒有可用的輸入。

我不確定Wing/Pycharm如何處理這個問題。帶有eclipse的Pydev可以與dev_appserver一起工作,但這可能是因爲GAE eclipse插件。

我發現自己經常在我的代碼中嵌入斷點並在shell中手動調試,主要是因爲它的運行速度比pydev調試器快。我這樣做是當我打斷點時將stdin/stdout重新路由回終端。 http://eatdev.tumblr.com/post/12076034867/using-pdb-on-app-engine

我在linux環境下。我確實與Windows上的GAE應用啓動器一起工作了一段時間,但不是最近。我想我回想起隱藏啓動dev_appserver的原始終端的應用程序啓動器,因此您可能必須從命令提示符啓動dev_appserver才能運行。如果Wing或Pycharm在下面使用pdb,我懷疑你可能需要類似的黑客攻擊。

+0

我發現get_current_session通過調試器是空白的。不知道爲什麼。當用完調試器時,它很好。這是一個Windows 64位機器。 – ZystemsGo 2012-04-13 00:25:33

+0

您是否使用Google用戶API?該API通過設置包含登錄用戶的環境變量在dev_appserver上工作。如果你的調試器對os.environ做任何事情,它可能會搞砸用戶API正在做的事情。 – dragonx 2012-04-13 00:49:19

1

經過了一個星期的折磨,我終於明白了這個問題。 gaesessions代碼是罪魁禍首。我們把DEFAULT_LIFETIME = datetime.timedelta(hours = 1),最初是DEFAULT_LIFETIME = datetime.timedelta(days = 7)。不知道爲什麼通過諸如wing或pycharm等調試器來運行它會阻止瀏覽器獲得會話。有趣的是,小時= 1的代碼更改在Wing調試器的linux上很好。很奇怪!

+0

在與Wing IDE開發人員交談後,他表示Windows用戶可能希望通過項目屬性中的環境字段將TZ環境變量設置爲UTC,以解決在進程運行時設置os.environ ['TZ']的問題(有關Windows運行時錯誤的詳細信息,請參閱Microsoft Windows上的問題)...這裏是運行時錯誤鏈接(http://wingware.com/doc/install/trouble-win32) 謝謝 -Dimitry – ZystemsGo 2012-04-15 02:56:49