通过 Google Cloud SDK 更新 App Engine 应用程序后无法启动它

Posted

技术标签:

【中文标题】通过 Google Cloud SDK 更新 App Engine 应用程序后无法启动它【英文标题】:Unable to start App Engine application after updating it via Google Cloud SDK 【发布时间】:2015-05-06 22:03:01 【问题描述】:

最近,我在 Windows 7 64 位中使用命令“gcloud components update”,通过Google Cloud SDK 将 Google App Engine 从 1.9.17 更新到 1.9.18。之后,我无法使用 App Engine 启动器启动任何项目。收到此错误:

Traceback (most recent call last):
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 83, in <module>
    _run_file(__file__, globals())
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 79, in _run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 36, in <module>
    from google.appengine.tools.devappserver2 import dispatcher
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\dispatcher.py", line 29, in <module>
    from google.appengine.tools.devappserver2 import module
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\module.py", line 71, in <module>
    from google.appengine.tools.devappserver2 import vm_runtime_factory
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\vm_runtime_factory.py", line 25, in <module>
    from google.appengine.tools.devappserver2 import vm_runtime_proxy
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\vm_runtime_proxy.py", line 29, in <module>
    from google.appengine.tools.devappserver2 import log_manager
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\log_manager.py", line 34, in <module>
    from google.appengine.tools.docker import containers
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\docker\containers.py", line 47, in <module>
    import docker
ImportError: No module named docker
2015-03-05 19:11:27 (Process exited with code 1)

我什至安装了最新的 Google Cloud SDK,但我遇到了同样的错误。

我能够安装appengine SDK 1.9.18(不使用 Google Cloud SDK)并且能够成功运行该项目。

此错误仅发生在 Windows 7 中通过 Google Cloud SDK 安装的 App Engine 启动器。

App Engine 问题跟踪器中提出了此问题:Issue 125。我建议你为这个问题加注星标。

【问题讨论】:

我没有要检查的 Windows 机器,但显然 C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\docker 没有正确安装 -- 你能检查那个目录是否存在以及里面有什么吗?最坏的情况,你应该可以从github.com/docker/docker-py 得到它... 是的,它在那里。我已经在另一个系统中安装了 Google Cloud SDK。那里也有同样的问题。 【参考方案1】:

我今天发生了这种情况,重新安装了app engine sdk。我无法在启动器中运行我的代码。

我记得读到没有使用pip app engine,但现在我已经解决了这个问题。

简而言之,我所做的是:

    安装piphttps://pip.pypa.io/en/latest/installing.html的足迹(这样也正确安装了setuptools)

    通过 pip 安装 docker-py:pip install docker-py 并准备就绪,我现在可以在启动器中运行我的代码

附: 之前尝试安装docker-py包,从https://github.com/docker/docker-py下载,但是缺少setuptools,下载安装包没有用。所以将它与 pip 一起使用。

【讨论】:

【参考方案2】:

这是 Cloud SDK 中捆绑的 dev_appserver 目前存在的问题。修复程序很快就会出来。同时,您的选择是: 1) 使用 Cloud SDK 时使用gcloud preview app run 运行您的应用 2)安装独立的 AppEngine SDK(你已经在你的问题中提到过)

【讨论】:

哇,在这和this 之间,Google 真的在 1.9.18 上丢了球。请尽快修复。 是否有指向 Google 错误跟踪器的链接?能够提高对这个问题的关注度会很有用。 我按照建议安装了独立的 AppEngine SDK,将我的 $PATH 指向它,但仍然出现同样的错误。 我发现我必须在 google-cloud-sdk 和 AppEngine SDK 之间更改 Google App Engine Launcher 的 Preferences 中的 App Engine SDK 路径,具体取决于我是要部署还是运行它分别在我自己的系统上。【参考方案3】:

如果安装 docker-py 不起作用并且堆栈跟踪显示错误行是:

from docker import docker

将此行更改为:

import docker

Source

【讨论】:

【参考方案4】:

根据@Tzach 的回答并添加一些信息。

要修改的文件是containers.py

对我来说,它位于这里: C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\docker

如果因为文件在应用程序中打开而无法修改它,实际上是该文件夹受到保护。只需将文件复制/粘贴到您的桌面上并从那里进行修改。然后将其复制回原始文件夹中。

【讨论】:

以上是关于通过 Google Cloud SDK 更新 App Engine 应用程序后无法启动它的主要内容,如果未能解决你的问题,请参考以下文章

如何使用工作负载身份通过 Google Cloud .NET SDK 访问 Google Kubernetes Engine 中的 ESP?

完全卸载 Google Cloud SDK Mac

google cloud sdk 怎么安装

google-cloud-sdk 安装因 python 语法错误而失败

Google Cloud SDK 和 App Engine SDK 有啥区别

如何使用 Google Cloud SDK 列出所有 Cloud Functions?