2

我有一个困扰我一个多星期的问题。我有一个在 Google App Engine 上使用 Django 用 python 编写的项目。该项目有一个登录页面,当我在 Google App Engine 中或使用 dev_server.py c:\project 从命令行运行该应用程序时,它工作正常。当我尝试通过 Wing 或 Pycharm 等调试器运行应用程序时,我无法通过登录页面。尝试登录后,它再次将我带回登录屏幕。当我查看日志时,它在调试器中显示 302(重定向),但通常显示 200(OK)。有人可以解释为什么会发生这种情况吗?

谢谢-Dimitry

4

2 回答 2

1

这不是一个很好的答案,因为我对 Wing 或 Pycharm 了解不多。但是 dev_appserver 将标准输入和标准输出重新路由到 WSGI 处理程序。如果您遇到 pdb.set_trace() 设置的断点,该断点通常会将您带到使用 stdin/stdout 的 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,我怀疑你可能需要类似的 hack。

于 2012-04-12T14:24:09.473 回答
1

经过一个星期的绞尽脑汁,我终于找到了问题所在。gaesessions 代码是罪魁祸首。我们输入 DEFAULT_LIFETIME = datetime.timedelta(hours=1),原来是 DEFAULT_LIFETIME = datetime.timedelta(days=7)。不知道为什么通过任何调试器(如wing或pycharm)运行它会阻止浏览器获取会话。有趣的是,使用 hours=1 的代码更改在带有翼调试器的 linux 上运行良好。很奇怪!

于 2012-04-13T11:15:41.177 回答