如何删除 Google Application Engine 中未使用的索引?

Posted

技术标签:

【中文标题】如何删除 Google Application Engine 中未使用的索引?【英文标题】:How can I remove unused indexes in Google Application Engine? 【发布时间】:2010-10-23 06:23:07 【问题描述】:

我为我的 GAE 应用程序添加了 accidentally added 一个新过滤器。索引的状态现在是“服务” - 但是我根本不需要该索引,我想删除。我该怎么做?

【问题讨论】:

如果你能用浏览器控制台删除这些就太好了 =( 【参考方案1】:

记录在here。希望对您有所帮助。

删除未使用的索引

当您更改或删除索引时 从 index.yaml 中,原始索引为 未从 App Engine 中删除 自动地。这给你 离开旧版本的机会 在新索引时运行的应用程序 正在建造,或恢复到 如果出现问题,请立即使用旧版本 发现有较新的版本。

当您确定旧索引是 不再需要,您可以删除它们 从 App Engine 使用以下 命令:

appcfg.py vacuum_indexes myapp/

此命令删除本地版本 index.yaml 中未提及的应用的所有索引。

【讨论】:

@fuentesjr:我冒昧地将引用的文本/代码添加到您的帖子中。 此接缝仅适用于 Python 版本 :-( 使用 JavaSDK 时,vacuum_indexes 参数丢失。使用 appcfg.py 命令也没有用,因为 Java 不会将索引存储在 index .yaml 这意味着您必须自己创建此文件并尝试按照您在 Javas xml 中定义它们的方式键入所有索引。 如果我从 index.yaml 中删除一个索引,GAE 会继续创建这个索引还是我必须使用上述过程删除它?【参考方案2】:

对于 GAE / Java,文档包括 this information:

删除未使用的索引

...

当您确定不再需要旧索引时,您可以 使用 Vacuum_indexes 操作从 App Engine 中删除它们:

./appengine-java-sdk/bin/appcfg.sh vacuum_indexes myapp/war

此命令删除应用程序中未提及的所有索引 datastore-indexes.xml 的本地版本和 生成/datastore-indexes-auto.xml。

【讨论】:

警告:对我来说,它似乎只考虑了 datastore-indexes-auto.xml。这意味着它提供删除 datastore-indexes.xml 中提到的声称不再使用的索引(当它们被使用时)。但除此之外,它在删除我的错误索引方面对我有用,而且我不必像其他答案所建议的那样创建任何 yaml 文件。 我在 Windows 上,并且成功使用了“appcfg.cmd Vacuum_indexes c:\myappdir\war”。它启动了我的 Web 浏览器来进行身份验证。必须粘贴代码。 如果您收到“访问代码无效或 OAuth 令牌已撤销。详细信息:invalid_grant”类型的错误,请尝试删除用户目录中的“.appcfg_oauth2_tokens_java”文件。【参考方案3】:

Windows Google AppEngine Java 中,我们必须使用 appcfg.cmd 命令来删除已部署应用程序的未使用索引

语法:

appengine-java-sdk-path\bin\appcfg.cmd Vacuum_indexes project-root-path\poject-name\war\

【讨论】:

【参考方案4】:

截至 2019 年 2 月,现在是:

gcloud datastore indexes cleanup index.yaml

【讨论】:

【参考方案5】:

对于 gae-java,正如 JochenJung 所提到的,“vacuum_indexes”工具可以工作,但您必须通过以下方式模拟 python 项目:

请注意,真空工具似乎仅在指向 *.appspot.com 时才有效,而不是本地开发者。环境。

为您的应用创建 app.yaml 并将其放在您的 /myapp/ 根目录中,至少:

    application: myproj
    version: 4
    runtime: python
    api_version: 1

其中“version”是您应用的版本,“myproj”是您项目的 GAE 名称。

创建一个 index.yaml 并将其放在同一个根目录中。事实证明,该工具将为您删除的每个索引提供是/否确认,而不是费力地将您要保留的索引的索引信息放入该文件,因此仅指示 ALL 更简单索引应该被删除,并使用确认来保留您想要保留的索引。

indexes:

# AUTOGENERATED

然后运行如上图所示的命令,


  /appcfg.py vacuum_indexes /path/to/myproj/

【讨论】:

我正在使用 Java GAE。这就像一个魅力。但是,我确实必须将app.yaml 更新为:application: myproj version: 4 runtime: python api_version: 1 handlers: -url: / script: home.py,因为在运行vaccum_indexes 时出现错误No UrlMap entires found in application configuration。另外,为了清楚起见,app.yamlindex.yaml 文件都应该放在你的war/WEB-INF 文件夹中。例如,要运行的命令是:appcfg.py vacuum_indexes /path/to/myproj/WEB-INF【参考方案6】:

如果您使用的是 ma​​ven mvn appengine:vacuum_indexes。不用mvn appengine:update,命令更新远程服务器。

maven 命令的完整列表here。

【讨论】:

【参考方案7】:

在使用 Java 的 Windows 上,这个命令对我有用:

appcfg.cmd vacuum_indexes C:\Users\Name\androidStudioProjects\Project\backend\src\main\webapp\

注意:确保您在webapp 文件夹中有一个datastore-indexes.xml(这些索引将被保留)。

【讨论】:

【参考方案8】:

使用当前版本的 gcloud,您可以这样做:

gcloud datastore cleanup-indexes index.yaml

这比调用 appcfg.cmd [...] 更直观。

【讨论】:

【参考方案9】:

gcloud datastore cleanup-indexes /path/to/file/index.yaml

此命令不再有效

gcloud datastore indexes cleanup /path/to/index.yaml

这是新命令

您应该在google cloud console 中运行它们。通常您可以使用google cloud console 中的file upload 功能上传index.yaml 文件。你的文件直接转到_admin 你可以cd 去那里打电话,

gcloud datastore indexes cleanup index.yaml

提示

如果您在 java 项目 中使用datastore,您将使用datastore-indexes.xml 而不是index.yaml。如果您不知道在哪里查找,您可能很难找到 index.yaml 文件。

您只需在 IDE 中查看 deploy console 即可找到 index.yaml 文件的路径。

【讨论】:

对于 Java 项目:它们不维护 index.yaml 文件,gcloud datastore indexes cleanup 不处理 datastore-indexes.xml 文件。为了弥补这一差距,我将 datastore-indexes.xml 转换为 index.yaml 使用:gcloud beta app migrate-config datastore-indexes-xml-to-yaml <path to datastore-indexes.xml> 这不会将 Java 项目切换为使用 index.yaml,即在尝试清理数据存储索引之前需要重复

以上是关于如何删除 Google Application Engine 中未使用的索引?的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?

如何传递 GOOGLE_APPLICATION_CREDENTIALS 中的内容而不是文件路径?

在测试中运行应用程序时如何解决 GOOGLE_APPLICATION_CREDENTIALS,Spring Boot?

“C:\Documents and Settings\Administrator\Local Settings\Application Data\Google&

如何将 Google Application Script 项目迁移到不同的帐户?

如何将 Google Cloud Vision API 凭据密钥文件指向 yii2 框架中的 GOOGLE_APPLICATION_CREDENTIALS 变量