realm-cli
v1 [已弃用]
在此页面上
重要
Realm 命令行界面(Realm CLI)已弃用
realm-cli
已弃用,并且不会接收未来的功能或错误修复。 请改用App Services CLI。
App Services CLI在npm
上可用。 要在系统上安装CLI ,请确保您有 Node.js,然后在shell中运行以下命令:
npm install -g atlas-app-services-cli
Overview
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 私钥,因此应避免无意中共享此文件。
身份验证
验证 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 帐户的用户名。
注销当前 CLI 用户
使用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
apps
导入应用程序
使用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
在协调导入的实体时应使用的导入策略。
导出应用程序
使用realm-cli export
将应用配置保存到本地应用程序目录。
realm-cli export \ --app-id=myRealmApp-abcde \ --output=path/to/exported/app/dir \ --include-hosting \ --as-template
--output <path>
- Optional.
App Services 将导出应用程序的目录路径。
如果指定,
realm-cli
则会在给定路径创建一个目录,并将应用程序配置导出到新目录。 如果指定路径已存在文件或目录,则导出将失败。注意
如果省略
output
参数,realm-cli
会将应用程序配置导出到当前工作目录中的新目录。
比较待处理的应用程序更改
使用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
秘密
列出所有密钥
使用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!
更新密钥的值
使用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
删除密钥
使用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
导入策略
执行应用程序导入时,有多种内置策略用于处理现有实体。
除非另有说明,否则所有导入均默认采用merge
策略。
合并(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", ... }
merge
strategy.{ "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
已根据其导入的配置文件进行更新。 FunctionB
和FunctionC
不包含在导入的应用程序目录中,因此使用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", ... }
replace
strategy.{ "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
已根据其导入的配置文件进行更新。 FunctionB
和FunctionC
未包含在导入的应用程序目录中,因此在使用replace
策略导入后,它们不会出现在应用程序中。 FunctionD
和FunctionE
作为新实体导入,并分配了系统生成的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", ... }
replace
strategy.{ "name": "FunctionZ", ... } { "name": "FunctionB", ... } { "name": "FunctionC", ... }
导入后,该应用程序具有以下功能:
{ "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... } { "id": <ObjectID 4>, "name": "FunctionZ", ... }
现有应用程序和导入的配置目录都包含名称为FunctionB
和FunctionC
的函数。 因此,这两个函数都保留了之前的id
值和名称。 这两个函数的其余值反映了从配置文件上传的值。 FunctionA
未包含在导入的应用程序目录中,因此在使用replace-by-name
策略导入后,它不会出现在应用程序中。 FunctionZ
作为新实体导入,并分配了系统生成的id
值。