【问题标题】:Serious GAE compatibility issue between Python 2.5 and Python 2.7Python 2.5 和 Python 2.7 之间存在严重的 GAE 兼容性问题
【发布时间】:2013-03-25 01:45:56
【问题描述】:

对于在glowscript.org 上找到的应用程序,我在将GAE 从Python 2.5 更新到Python 2.7 时遇到了一个严重问题。我目前正在使用 GAE Launcher 1.7.6 在 Windows 上进行本地测试。

用户可以创建名称包含空格的文件夹,应用程序将空格转换为“%20”以形成数据存储的密钥;这些文件夹中的文件名也是如此。在glowscript.org 上存在相当数量的用户,他们的数据依赖于这些键。

在尝试本地调试 Python 2.7 版本中的一些奇怪问题时,很明显 GAE 数据存储机制发生了重大变化。假设用户创建了一个名为“Test Cases”的文件夹。与glowscript.org 一致,此文件夹名称转换为“Test%20Cases”并用作PUT 操作中的键:

文件夹 = 'Test%20Cases' f = Folder( parent = username, key_name = folder, public=True ) # 文件夹继承自 db.Model f.put()

我在使用 Python 2.7 和启动器 1.7.6 运行时在日志中看到的是 '%20' 已被转换回空格:

“PUT /api/user/test0324k/folder/Test Cases HTTP/1.1”200 -

当我使用 Python 2.5 和 GAE Launcher 1.7.2 执行相同的操作(本地)时,我在日志中看到:

“PUT /api/user/test0324k/folder/Test%20Cases HTTP/1.1”200 -

如果我部署到网络,用户会收到错误,因为他们的数据具有包含“%20”的键,而现在无法访问这些键。我不能继续使用 Python 2.5 版本,因为它已经被弃用并且很快就会消失。在不破坏许多人的工作的情况下,我能做些什么来继续前进?

【问题讨论】:

  • 为什么不替换文件夹模型中的空格?就在put-ing 之前。
  • 那些日志消息与数据存储无关。他们正在记录 HTTP PUT 请求。

标签: google-app-engine


【解决方案1】:

“我不能继续使用 Python 2.5 版本,因为它已经被弃用并且很快就会消失。”

我们于 2013 年 3 月 8 日在 blog post 中宣布弃用 Python 2.5,其中引用了我们的弃用政策(https://developers.google.com/appengine/terms 的第 7.2 节)。我建议阅读它。该部分简短而中肯。

您在我们的 Python 2.5 和 2.7 堆栈之间看到的任何意外变化都值得报告。请通过normal channels 提交报告。 (您几乎可以在此处复制/粘贴您所写的内容。)

这就是说(这是我个人的观点,而不是 Google 的观点)制作一个包含 %20 的密钥,然后将其放入一个 url 而不转义它是如履薄冰。

【讨论】:

  • 我同意您总是希望在输入和输出上标准化 %20,因为您总是可以期望某处的某些东西不会为您进行编码。 (即开始获取一些“+”字符 ;-)
  • 我继承了应用程序的那部分,现在我不清楚为什么我的同事将空间转换为 %20 来构建密钥。我会按照你说的将报告提交到“正常渠道”。
  • 我给了我错误的印象,我应该纠正。这不是一个古怪的空间问题,而是更普遍的问题。 GlowScript 所做的是在向服务器发送信息之前使用 encodeURIComponent(),这似乎是合适的做法,并且正是这个编码的密钥用于搜索数据存储。问题是 Python 2.7 版本不使用这个转换后的密钥,它不转换它,因此(可能)不可能在 gloomscript.org 的现有数据存储中找到数据。
  • 补偿 Python 2.7 版本中主要变化的最佳解决方案是不使用路由机制传递给处理程序的参数,而是使用 self.request.path,它包含客户端发送到服务器的实际(转义)字符,这是处理程序作为 Python 2.5 版本的参数发送的内容。在对我的 GAE 错误报告的评论中,我敦促将行为变化明确记录在 2.5 -> 2.7 迁移说明中。
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 2018-06-02
  • 2013-06-18
  • 2015-10-25
  • 2021-12-25
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多