问题标签 [gae-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
68 浏览

google-app-engine - 将 App Engine 前端版本转换为模块

我稍微“滥用”了 App Engine (java) 中的前端“版本”概念,以便在引入模块之前实现它们。我的配置包括:module1-dot-myapp.appspot.com、module2-dot-myapp.appspot.com、module3-dot-myapp.appspot.com 等,基于版本概念(更常用于数字:1-dot-myapp 等)。

具体来说,所有版本的代码都是相同的,但每个版本实际上用于不同的目的。这种分离允许不同的客户端使用不同的 api 版本,单独的部署计划,暂存版本,日志分离等。

我的问题是,在这些条件下,将我的应用程序转换为“真实”模块的最佳方式是什么?这样“module1”是一个实际的模块(仍然映射到相同的 url - module1-dot-appspot.com)?

0 投票
1 回答
82 浏览

python - 如何强制非默认 GAE 模块更新到新版本?

所以我为较小的项目推荐了设置,在主文件中有多个模块 YAML 文件,所有共享源。喜欢这里:https ://cloud.google.com/appengine/docs/python/modules/#devserver

我只有 2 个模块:默认模块,以及用于运行任务、管道等的后端模块。

默认版本为 22,后端版本为“uno”(此模块的第一个也是唯一一个版本)。

我无法让后端更新到版本“dos”。每当我测试东西时,我都会得到 404,比如后端模块上不存在源文件。请求使其进入正确的模块,但出错。

我曾尝试使用以下方法进行更新:appcfg.py update main_directory app.yaml backend.yaml 但它看起来总是只是在进行“默认模块”更新。我从来没有看到任何关于后端模块的信息。即使我尝试上述命令减去 app.yaml(它充当我的默认模块 YAML)。

在开发者控制台中,我只能看到后端模块的单一版本。尽管我尝试添加'dos'版本和'v2'版本',但它没有添加第二个版本 - 两者都从未“工作”过。

还有其他人在将“后端”模块更新到新版本时遇到问题吗?是“一个目录中的所有内容”设置给我带来了问题吗?我只是没有使用正确的 appcfg 咒语吗?

更新 1:我的目录结构如下所示多个模块 - 一个目录

其中 module1.yaml 是 app.yaml,module2.yaml 是 backend.yaml。

0 投票
3 回答
592 浏览

python - 无法找到/修改使用标准运行时 (python27) 的 Google App Engine 托管 VM 的 Dockerfile

我想修改使用标准运行时 (python27) 的 Google App Engine 托管 VM 的 Dockerfile。

我想这样做以添加一个需要调用以实现 HTTP 请求的 C++ 库。这个库几乎是我需要添加到沙盒 python27 运行时的唯一补充。

文档清楚地表明这是可能的:

每个标准运行时都使用 SDK 提供的默认 Dockerfile。您可以通过向此文件添加新的 docker 命令来扩展和增强标准运行时。

在其他地方,他们说标准运行时的 Dockerfile 将在项目目录中生成:

当您使用 gcloud 运行或部署基于标准运行时(在本例中为 Python27)的托管 VM 应用程序时,SDK 将使用标准运行时作为基础映像创建一个最小的 Dockerfile。你会在你的项目目录中找到这个 Dockerfile...

这是我应该根据同一页面修改的:

本教程后面的步骤将向您展示如何通过向 Dockerfile 添加指令来扩展运行时环境的功能。

问题是当我在开发服务器上运行我的应用程序时,我无法在任何地方找到 Dockerfile,所以我无法对其进行任何更改。

有没有人设法修改 Google App Engine 的标准运行时 Dockerfile?任何帮助,将不胜感激。

0 投票
3 回答
2123 浏览

python - 无法运行 Google App Engine 自定义托管虚拟机:--custom-entrypoint must be set 错误

问题描述

我正在尝试为 Google App Engine 创建一个自定义托管 VM,其行为与 Google 提供的标准 python27 托管 VM 相同。(我这样做是向运行时添加 C++ 库的第一步)。

从 google文档中,以下 Dockerfile 指定了标准的 python27 运行时:

gcloud preview app run通过检查使用标准 python27 运行时生成的文件,我已经验证了这是正确的 Dockerfile 。它与此相同。

但是当我使用这个 Dockerfile 运行我的应用程序时dev_appserver.pygcloud preview app run我收到一条错误消息:

我正在使用最新版本的 gcloud(1.9.86,带有 app-engine-python 组件版本 1.9.28)和独立的 python 应用引擎 SDK(1.9.28)。我之前的版本也有同样的问题,所以我更新到最新版本。

我尝试过的事情:

gcloud preview app run --help有以下要说的--custom-entrypoint

我不知道该怎么做。docker 映像是否应该尚未包含 ENTRYPOINT?为什么我需要另外提供一份?另外,图像的入口点应该gcr.io/google_appengine/python-compat是什么?谷歌没有为此提供任何文档。

我尝试了一个无意义的--custom-entrypoint="echo",它使错误静音,但应用程序不响应任何 HTTP 请求。

我发现的另外两个相关的 stackoverflow 问题没有帮助。接受的答案似乎表明这是已解决的 SDK 中的错误。但是我在两个版本的SDK中都试过了,包括最新的,还是有问题。

重现步骤:

为了突出我的问题,我创建了一个生成错误的简单应用程序。它仅包含三个文件:

app.yaml

Dockerfile

Dockerfile与用于 python27 运行时的相同(实际上是从使用 python27gcloud preview app run运行时生成的 Dockerfile 复制粘贴的),因此这应该与设置相同runtime: python27

wsgi.py

但是,当我dev_appserver.py app.yaml在包含这三个文件的目录中运行时,出现以下错误:

0 投票
1 回答
273 浏览

google-app-engine - Google App Engine 逐步升级

我有一个用 PHP 编写的复杂 appengine 服务,现在我想将它部分迁移到 Python。

假设我的服务有 2 个部分:/signIn/..../data/.... 我只想先迁移/signIn/部分,然后再迁移/data/

但是,由于我的服务很大,所以我想/signIn/在 Python 中构建新的部分,然后使用流量拆分对这部分进行一些 A/B 测试。

我的问题是流量拆分只能应用于版本,所以我的旧版本和新版本必须在同一个模块中,而同一个模块意味着它们必须用相同的语言编写(我错了,请参阅更新部分)。但我正在从 PHP 迁移到 Python。

对我来说最好的解决方案是什么?

谢谢,

解决方案

在 Dan Cornilescu 的帮助下,这就是我所做的:

  1. 将应用程序拆分为 2 个模块:默认和旧版本。
  2. 调度/signIn/到默认模块,其余到旧版本模块。
  3. 在 Python中制作另一个版本的/signIn/默认模块)
  4. 配置流量拆分以缓慢增加 Python 部分的请求百分比。这将使我们能够测试并确保没有发生严重的错误。

注意:该/signIn/部分必须是默认模块,因为 GAE 的流量拆分仅在默认模块下工作。

我确认我们可以为一个模块制作两个不同语言的版本。

0 投票
1 回答
255 浏览

google-app-engine - 默认生产环境时,dispatch.yaml 不适用于任务队列

我开始将一个应用程序拆分为两个模块,并成功地让该应用程序在 App Engine 上运行。我可以通过使用模块/版本特定的 URL 来驱动流量并查看处理的请求和任务队列事件没有错误来验证新配置。

例如,使用 - http://micro-services.msn-transit-api.appspot.com - 正确地将流量驱动到新的非默认版本。

但是,当我在 GAE 控制台中更新默认版本时,应该分派到新模块的请求没有正确路由。它们被分派到默认模块并由于端点移动而失败。

就好像 dispatch.yaml 没有被激活一样。

默认应用 yaml 文件:

新模块 yaml 文件:

调度 yaml :

值得注意的是,失败的端点会受到任务队列中的作业的影响。

为什么在 GAE 上默认版本会改变其行为?

0 投票
3 回答
1089 浏览

java - 将简单的 AppEngine Java 项目转换为使用模块

这个问题类似于这个问题但这并没有解决我的问题。

我有一个非常简单的 Google AppEngine / Java 应用程序。它自 2011 年以来一直在运行,并且不使用 maven 或其他我认为不需要的花哨的东西。最近,我向此应用程序添加了 Cloud Endpoints。我没有使用 generated endpoint-libs,因为我似乎不需要它,没有它一切正常。

该应用程序有一个前端和一个后端已经有一段时间了。我现在正在尝试将这些转换为模块:前端将成为默认模块,后端将成为另一个模块。

我的旧项目的结构是这样的:

我通过为 Java 类提供正确的注释来实现云端点。没有花哨的 Maven 产生魔法。

我知道我需要为每个模块创建一个目录,如下所示:

我的问题是:

  • 我应该把src目录放在哪里?
  • 我应该在中声明我的云端点类default/WEB-INF/web.xml吗?
  • 每个模块可以有自己的WEB-INF/cron.xml吗?

如果看起来我不知道自己在做什么,那可能是对的,但我不想将所有内容都放在 maven pom 文件中,编写 gradle 脚本等,而是专注于实际应用程序。这可能是因为我在 vi 和 emacs 的陪伴下长大,那时我们自己编写代码。;)

更新:

我将 src 目录与和project放在同一级别下。编译后的 Java 类出现在 下,这表明我做对了。GAE 在 中生成一个文件,我以前在不使用模块时没有看到该文件。defaultmoduledefault/WEB-INF/classes*.apidefault/WEB-INF

在本地,我可以看到我的云端点 API,并且可以使用它们。当我部署到 AppEngine 并尝试使用 API 资源管理器时,出现异常:

/_ah/spi/BackendService.getApiConfigs java.lang.NullPointerException at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:100) at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet .java:71) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

等等……

我确实添加了 OAuth2 凭据并将它们设置在我的云端点配置中。我找不到 的代码SystemServiceServlet,但我猜它找不到我的 API 类(在 中配置default/WEB-INF/web.xml)。

另一个更新:

我了解到 AppEngine 模块需要企业归档 (ear) 结构,并且像简单的 GAE 应用程序那样进行部署是行不通的。没有“一键式”部署。我按照使用 Java 编程 Google App Engine中的说明进行操作,最终得到了一堆 Eclipse 项目。它相当企业化,但我可以让它抛出与我之前部署的简单版本相同的异常。我想知道我是否取得了任何进展。

0 投票
1 回答
2404 浏览

google-app-engine - 我可以在 Google App Engine 模块中使用 TensorFlow 吗?

我有一个数据处理模块作为我的 GAE 应用程序的一部分。TensorFlow 为 Linux 和 OSX 提供了单独的安装程序,这向我表明它可能无法很好地与 GAE 沙箱配合使用。是否可以在 GAE 模块中使用 TensorFlow?

0 投票
2 回答
1751 浏览

android - Google App Engine 模块错误:任务“:app:transformClassesWithDexForDebug”执行失败。> java.io.IOException: 删除失败

尝试使用 google app engine 模块编译我的 android 应用程序,但该死的东西不起作用。它以前可以工作,但由于某种原因,在我清除了我的 Android Studio 缓存并重新启动后,它停止了编译。这是我得到的错误:

我检查了文件夹,上面的文件甚至不存在 - 那它为什么要尝试删除它呢?

我还尝试使用上述名称放入一个虚拟文件,希望这可能有效,但它没有。

这是我的 gradle 文件的样子:

应用程序

项目:

0 投票
0 回答
272 浏览

python - GAE modules.get_current_version_name() 引发 KeyError 异常

我有一个谷歌应用程序引擎应用程序,它有 2 个版本(主版本和暂存版本),它们都在同一个数据存储上运行,但具有不同的代码库。

根据我的 stackoverflow 搜索和 gae python 文档,函数 modules.get_current_version_name() 应该返回版本名称,在我的例子中是“staging”或“master”。

GAE python 文档

但是,当我调用它时,我得到了 KeyError 异常。似乎在 os.environ 或其他东西中执行实际的 dict 查找时,它试图获取一个不存在的键 'CURRENT_VERSION_ID'。

我必须采取任何步骤来设置该环境变量吗?这仍然是获取应用程序/模块版本的正确方法,还是有其他选择?