Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

realm-cli v1 [已弃用]

在此页面上

  • Overview
  • 安装
  • 一般选项
  • 身份验证
  • 验证 CLI 用户
  • 注销当前 CLI 用户
  • 查看当前登录的用户
  • apps
  • 导入应用程序
  • 导出应用程序
  • 比较待处理的应用程序更改
  • 秘密
  • 列出所有密钥
  • 创建密钥
  • 更新密钥的值
  • 删除密钥
  • 导入策略
  • 合并(merge)
  • 替换
  • 按名称替换

重要

Realm 命令行界面(Realm CLI)已弃用

realm-cli 已弃用,并且不会接收未来的功能或错误修复。 请改用App Services CLI。

App Services CLI在npm上可用。 要在系统上安装CLI ,请确保您有 Node.js,然后在shell中运行以下命令:

npm install -g atlas-app-services-cli

Atlas App Services CLI ( realm-cli ) 允许您以编程方式托管应用程序。使用realm-cli ,您可以从本地目录创建或更新应用程序,以及将现有应用程序导出到本地目录。

realm-cli 可在npm上使用。 要在系统上安装 1的 版本,请确保您有realm-cli Node.js 已安装,然后在 shell 中运行以下命令:

npm install -g mongodb-realm-cli@^1

重要

检查 CLI 版本

本页文档了realm-cli版本 1 的命令、参数和标志。如果您有较新版本的realm-cli ,请运行realm-cli --help以获取更新命令和用法示例的列表。 要检查 CLI 版本,请使用: realm-cli --version

以下选项可用于所有realm-cli命令:

--config-path <File System Path>
Optional.

如果包含在realm-cli login中,则将有关经过身份验证的会话的信息存储在指定路径的文件中。 会话信息包括 MongoDB Cloud 用户名、 MongoDB Atlas 编程 API 密钥和会话刷新令牌。

如果包含在任何其他命令中,则使用保存在指定路径(如果存在)中的会话(而不是当前 CLI 身份验证状态)对请求进行身份验证。

警告

由于会话配置文件包含 MongoDB Atlas 编程 API 私钥,因此应避免无意中共享此文件。

--disable-color
Optional.

如果指定,则抑制realm-cli输出中的所有文本颜色。

默认情况下,某些输出(例如错误和导入差异)是彩色的。 如果要防止这种行为,请使用此标志。

--yes
Optional.

如果指定,则会自动对realm-cli的任何是/否提示做出肯定响应。

使用realm-cli login通过MongoDB Atlas 编程 API 密钥对 MongoDB Cloud 用户进行身份验证。

realm-cli login --api-key="<my api key>" --private-api-key="<my private api key>"
--api-key <api key>

您要用于登录的 MongoDB Cloud 帐户的有效公共 MongoDB Atlas编程 API 密钥

--private-api-key <private api key>

您要用于登录的 MongoDB Cloud 帐户的有效私有 MongoDB Atlas编程 API 密钥

--username <MongoDB Cloud username>

(已弃用)您希望使用个人 API 密钥登录的 MongoDB Cloud 帐户的用户名。

使用realm-cli logout注销当前登录的用户。

realm-cli logout

使用realm-cli whoami查看当前登录到 CLI 的用户的详细信息(如果适用)。

realm-cli whoami

如果当前有登录用户,则其信息将按以下格式显示在下一行:

<username> [API Key: ********-****-****-****-<last 12 digits of API key>]

如果没有用户登录, realm-cli将返回以下消息:

no user info available

使用realm-cli import将本地应用程序目录导入到托管应用程序中。 如果将目录导入到不存在的应用程序中, realm-cli可以为您创建该应用程序

提示

您必须是Project Owner才能导入应用程序。 有关更多信息,请参阅: Atlas user角色。

realm-cli import \
--app-id=myapp-abcde \
--path=./path/to/app/dir \
--strategy=merge \
--include-hosting \
--include-dependencies
--app-id <App Services Application ID>
Optional.

您的应用的应用程序 ID。

如果未指定, realm-cli将尝试使用config.json中定义的app_id值。 如果config.json没有app_id值, realm-cli会提示您创建新应用程序。

注意

新应用程序 应用程序 ID

如果您使用realm-cli创建新应用程序,则 App Services 会生成新的应用程序 ID 并忽略您为--app-id标志指定的任何值。

--path <path>
Optional.

包含要导入的文件的目录路径。 该目录必须至少包含有效的config.json文件。

如果省略path参数, realm-cli将在当前应用程序目录中搜索config.json文件。

--strategy ['merge|replace|replace-by-name']
Optional.
Default: Merge

realm-cli在协调导入的实体时应使用的导入策略

--project-id <MongoDB Cloud Project ID>
Optional.

您要在其上托管新创建的应用的Atlas 项目 Project ID 。 如果指定, realm-cli将不会提示您在创建新应用程序时选择项目。

注意

realm-cli 忽略--project-id的值,除非您导入新应用程序。

--include-hosting
Optional.

如果指定,则上传并部署应用的/hosting/files目录中的所有静态资产。

--include-dependencies
Optional.

如果指定,则上传并部署应用的/functions目录中的node_modules存档中包含的任何外部依赖项。

使用realm-cli export将应用配置保存到本地应用程序目录。

realm-cli export \
--app-id=myRealmApp-abcde \
--output=path/to/exported/app/dir \
--include-hosting \
--as-template
--app-id <App Services Application ID>
Optional.

您的应用的应用程序 ID。

--output <path>
Optional.

App Services 将导出应用程序的目录路径。

如果指定, realm-cli则会在给定路径创建一个目录,并将应用程序配置导出到新目录。 如果指定路径已存在文件或目录,则导出将失败。

注意

如果省略output参数, realm-cli会将应用程序配置导出到当前工作目录中的新目录。

--include-hosting
Optional.

如果指定,则导出应用的hosting/files目录中的所有托管静态资产。

--for-source-control
Optional.

如果启用, realm-cli将通过 GitHub 源代码管理导出不带与部署冲突的任何字段的应用程序配置,包括config.json文件中的nameapp_idlocationdeployment_model等字段以及链接到该应用程序的任何 Atlas 数据源的config.json中的config.clusterName字段。

--as-template
Optional.

如果启用, realm-cli会导出不带任何服务 ID 值(包括应用程序 ID)的应用程序配置。这简化了从导出的配置创建新应用程序的过程。

使用realm-cli diff返回已部署的应用程序和本地应用程序目录之间的配置文件的差异。

# Diff application config files
realm-cli diff
# Diff application config files and hosted files
realm-cli diff --include-hosting

差异如下所示:

--- functions/oldFunctionName/config.json
+++ functions/oldFunctionName/config.json
@@ -1,6 +1 @@
-{
- "id": "5d4c6a5cd28e555496a705da",
- "name": "oldFunctionName",
- "private": false
-}
--- functions/newFunctionName/config.json
+++ functions/newFunctionName/config.json
@@ -1 +1,6 @@
+{
+ "id": "5d4c6a5cd28e555496a705da",
+ "name": "newFunctionName",
+ "private": false
+}
Modified Files:
* /index.html
* /auth/confirmEmail.html
* /auth/resetPassword.html
--include-hosting
Optional.

如果指定,则差异包含应用的hosting/files目录中与应用的已部署文件不同的文件列表。

使用realm-cli secrets list返回一个列表,其中包含应用程序中每个密钥的名称和 ID。

realm-cli secrets list

返回的密钥列表如下所示:

ID Name
5d5c25415e30c7ef857c6a10 test-secret-please-ignore
5d56dd453b467e2a48a6ec32 some-other-secret

使用realm-cli secrets add创建具有指定名称和值的新密钥

realm-cli secrets add --name=mySecret --value=SuperSecretValue!
--name <Secret Name>

新密钥的唯一名称。 如果现有密钥已具有指定名称,则此操作将失败。

--value <Secret Value>

新密钥的值。

使用realm-cli secrets update更改应用程序中现有密钥的值。

# Update a Secret by name
realm-cli secrets update --secret-name=mySecret --value=NewSecretValue
realm-cli secrets update --name=mySecret --value=NewSecretValue
# Update a Secret by name
realm-cli secrets update --secret-id=5ba9c5c2e707c02b38031412 --value=NewSecretValue
realm-cli secrets update --id=5ba9c5c2e707c02b38031412 --value=NewSecretValue
--secret-name <Secret Name>
--name <Secret Name>

要更新的密钥的名称。

--secret-id <Secret ID>
--id <Secret ID>

要更新的密钥的 ID 值。

--value <Secret Value>

密钥的新值。

使用realm-cli secrets remove从应用程序中删除现有密钥

# Remove a Secret by name
realm-cli secrets remove --secret-name=mySecret
realm-cli secrets remove --name=mySecret
# Remove a Secret by ID
realm-cli secrets remove --secret-id=5ba9c5c2e707c02b38031412
realm-cli secrets remove --id=5ba9c5c2e707c02b38031412
--secret-name <Secret Name>
--name <Secret Name>

要从应用中删除的密钥的名称。

--secret-id <Secret ID>
--id <Secret ID>

要从应用中删除的密钥的 ID 值。

执行应用程序导入时,有多种内置策略用于处理现有实体。

除非另有说明,否则所有导入均默认采用merge策略。

realm-cli import --strategy=merge

merge策略下,应用程序目录中的实体会以非破坏性方式添加到应用程序中。 应用程序中的任何现有实体如果在导入的应用程序目录中没有表示,则保持不变。

如果导入实体的id值与现有实体的id匹配,则现有实体将更新以匹配导入的实体。 App Services 将系统生成的id值分配给没有id值的实体,然后再将其作为新实体导入。

如果导入的实体的id与现有实体不匹配,则导入将失败。 导入具有非 ObjectID id值的实体会导致错误。

注意

如果导入的实体具有id字段,则该值必须是 ObjectId,否则合并将失败。

例子

现有应用程序具有三个功能:

{ "id": <ObjectID 1>, "name": "FunctionA", ... }
{ "id": <ObjectID 2>, "name": "FunctionB", ... }
{ "id": <ObjectID 3>, "name": "FunctionC", ... }
A local application directory is imported with the merge strategy.
The directory contains configuration files for the following functions:
{ "id": <ObjectID 1>, "name": "FunctionA_Updated!", ... }
{ "name": "FunctionD", ... }

导入后,该应用程序具有以下功能:

{ "id": <ObjectID 1>, "name": "FunctionA_Updated!" }
{ "id": <ObjectID 2>, "name": "FunctionB", ... }
{ "id": <ObjectID 3>, "name": "FunctionC", ... }
{ "id": <ObjectID 4>, "name": "FunctionD", ... }

FunctionA 已根据其导入的配置文件进行更新。 FunctionBFunctionC不包含在导入的应用程序目录中,因此使用merge策略导入后它们保持不变。 FunctionD作为新实体导入,并分配了系统生成的id值。

realm-cli import --strategy=replace

replace策略下,如果导入实体的id值与现有实体的id匹配,则 App Services 会将现有实体替换为导入的实体。 如果导入实体的id值与现有实体不匹配,则导入失败。 如果现有实体的id与任何导入实体的id都不匹配,App Services 将删除该现有实体。

App Services 会为缺少id值的实体生成id值,然后再将其作为新实体导入。 导入具有非 ObjectID id值的实体不会引发错误。

例子

现有应用程序具有三个功能:

{ "id": <ObjectID 1>, "name": "FunctionA", ... }
{ "id": <ObjectID 2>, "name": "FunctionB", ... }
{ "id": <ObjectID 3>, "name": "FunctionC", ... }
A local application directory is imported with the replace strategy.
The directory contains configuration files for the following functions:
{ "id": <ObjectID 1>, "name": "FunctionA_Updated!", ... }
{ "name": "FunctionD", ... }
{ "id": "non-ObjectID-value", "name": "FunctionE", ... }

导入后,该应用程序具有以下功能:

{ "id": <ObjectID 1>, "name": "FunctionA_Updated!" }
{ "id": <ObjectID 4>, "name": "FunctionD", ... }
{ "id": <ObjectID 5>, "name": "FunctionE", ... }

FunctionA 已根据其导入的配置文件进行更新。 FunctionBFunctionC未包含在导入的应用程序目录中,因此在使用replace策略导入后,它们不会出现在应用程序中。 FunctionDFunctionE作为新实体导入,并分配了系统生成的id值。

realm-cli import --strategy=replace-by-name

replace-by-name策略下,如果导入实体的name值与现有实体的name匹配,则 App Services 会将现有实体替换为导入的实体。 如果导入实体的name值与现有实体不匹配,则该实体将成为新实体。 如果现有实体的name与任何导入实体的name都不匹配,App Services 将删除该现有实体。

如果导入的实体没有name值, realm-cli将引发错误。

例子

现有应用程序具有三个功能:

{ "id": <ObjectID 1>, "name": "FunctionA", ... }
{ "id": <ObjectID 2>, "name": "FunctionB", ... }
{ "id": <ObjectID 3>, "name": "FunctionC", ... }
A local application directory is imported with the replace strategy.
The directory contains configuration files for the following functions:
{ "name": "FunctionZ", ... }
{ "name": "FunctionB", ... }
{ "name": "FunctionC", ... }

导入后,该应用程序具有以下功能:

{ "id": <ObjectID 2>, "name": "FunctionB", ... }
{ "id": <ObjectID 3>, "name": "FunctionC", ... }
{ "id": <ObjectID 4>, "name": "FunctionZ", ... }

现有应用程序和导入的配置目录都包含名称为FunctionBFunctionC的函数。 因此,这两个函数都保留了之前的id值和名称。 这两个函数的其余值反映了从配置文件上传的值。 FunctionA未包含在导入的应用程序目录中,因此在使用replace-by-name策略导入后,它不会出现在应用程序中。 FunctionZ作为新实体导入,并分配了系统生成的id值。