我的App Engine数据存储区遇到了严重问题,它似乎完全不受调试影响:构建它们后我无法修改实体。
当从app.yaml中定义的控制台工作时,问题甚至存在,该控制台不与我的主应用程序共享任何代码。这是控制台的一个例子:
>>> foo = Topic(name='bar') >>> foo.name 'bar' >>> foo.name = 'foo' >>> foo.name 'bar'
此相同行为会影响应用程序中的所有实体类型和所有属性。实体是否已被保存没有任何区别。
我已经尝试过几天,几周和几个月前的转速,问题仍然存在,即使我确实已经注意到它,如果它实际上是几周和几个月前,因为它打破了应用程序逻辑。它存在于运行Ubuntu和OSX的不同机器上,它也出现在生产中的所有应用程序版本上,并且至少存在于我测试过的其他应用程序中。在擦除我的SDK数据存储区后,使用不同的端口,刷新我的内存缓存和任务队列,重新安装SDK以及我绝望时能想到的所有其他调试技巧,它仍然存在。
一个不受影响的地方是管理控制台。相同的代码序列获得修改后的实体的预期结果。即使我导入了每个模块或类,我都可以想到这可能会造成麻烦,控制台仍然可以按预期工作。另一个迹象表明我的代码中没有任何东西导致这个问题(并且我不会完全疯狂)。
我很确定,就在几天前,我可以从管理控制台中尽可能地修改我的应用程序中的实体。毕竟,不可变实体不是很有用。
有些建议真的非常值得赞赏。我担心这个问题会阻止我继续开发,直到我能解决它。
答案 0 :(得分:1)
您使用的是哪种控制台?如果它是从shell.appspot.com或类似的派生的,那么控制台在每个>>>
提示符下保存和恢复全局变量很可能会造成这些痛苦。
如果您使用/_ah/admin/interactive
上的交互式控制台(默认情况下在dev_appserver.py中),请尝试将所有相关代码放入输入窗口并一次性执行;这样可以防止任何保存/恢复行为妨碍您的实验。
答案 1 :(得分:0)
这可能是一个愚蠢的问题,但你在修改实体后调用.put()吗?我无法从您的代码示例中确切地知道,在设置它后,您后续获取属性应该是在同一个会话中,还是在另一个会话中。
另外,您可以粘贴相关的模型定义吗?并告诉我们您是否正在使用任何可能干扰您的模型的App-Engine特定库。