3

我的 AppEngine 应用程序在我的桌面计算机上的开发服务器上运行良好,但我无法在 Google 的服务器上获取版本以关注我的源代码更新。

这是最有说服力的例证。我的 app.yaml 文件开始为:

application: xxxxxxxx
version: 1
runtime: python
api_version: 1

builtins:
- datastore_admin: on

handlers:
- url: /statix
  static_dir: statix

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.py

最后一行将所有非静态 URL 路由到 main.py 文件。我们将这个版本的 main.py 称为“旧”版本。

在我对 main.py 进行了一些常规更改(从而创建了“新”版本)之后,问题就开始了。“新”版本在我的 localhost 机器上运行良好,但在我部署到 GAE 后,它的更改无法通过 Big Internet 提供。相反,GAE 服务于由“旧”main.py 计算的页面。有时退出 GAE Launcher 并重新启动会有所帮助,但现在(几个小时)没有效果。即使机器重新启动。

因此,为了进行实验,我将 app.yaml 的最后一行更改为:

script: main2.py

我重新部署到 GAE,当我访问我的网站时,我得到一个 500 错误——正如预期的那样——因为项目中没有 main2.py 文件。

所以我将“新”的 main.py 磁盘文件重命名为 main2.py,重新部署到 GAE,然后 500 错误消失了——也如预期的那样。

但这就是奇怪的地方。这个刚刚上传的 main2.py 文件是“新”的 main.py,只是重命名了。但是,GAE 提供的页面是由“旧”main.py 计算的页面!

我已清除浏览器缓存。我什至启动了一个尘土飞扬的 Opera 副本,它从未见过该项目提供的 URL,而且它也显示“旧”main.py 创建的过时页面内容。

我已经使用 App Engine 几年了。一周前我从来没有遇到过这样的麻烦。我最近将 Launcher 更新到 1.7.3 (Mac OS X 10.6.8)。起初我以为我的 Launcher 不知何故损坏了,但 app.yaml 实验表明它是 GAE 本身的东西。我的 GAE Launcher 中有很多项目,我真的不想进行全新安装。

我敢打赌,当我听到你的想法时,我会感到尴尬,但我已经没有想法了。

附录:用户 dragonx 建议缓存可能是问题的根源,现在我想起来了,这确实是在我使用 Google Domains 服务为应用程序配置自定义域之后开始的。但是,根据 ,这里curl -D是我的应用程序主页上的标题:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Vary: Accept-Encoding
Date: Tue, 11 Dec 2012 02:29:43 GMT
Server: Google Frontend
Transfer-Encoding: chunked

看起来缓存已关闭。尽管如此,我还是找不到如何返回 Google Domains 服务并关闭缓存。:-(

附录#2:我将我的文件作为不同的应用程序上传(即我被允许的 10 个应用程序中的另一个)。他们提供更新。但是,当我对新上传的文件进行更改时,这些更改并没有出现。因此,似乎无论出现什么问题,它都会影响我用户帐户下的所有应用程序。

4

2 回答 2

1

查看“版本”和“管理员日志”,您可能正在更新错误的版本,即不是默认的 https://appengine.google.com 也尝试不使用 cookie(cookie 有时会对更新产生奇怪的影响)

appcfg.py update . --no_cookies
于 2012-12-11T06:03:17.257 回答
1

您是否设置了 HTTP 缓存标头?如果是这样,您可能会从一些中间缓存中获取结果,例如 GAE 的边缘缓存。

于 2012-12-10T16:26:08.410 回答