Bench CLI 使用模块 frappe.utils.bench_manager 来获取当前 bench 目录中存在的框架以及其他应用程序的命令。
本页面仅涉及 Frappe 项目中存在的、直接属于 CLI 工具一部分的命令。这些命令定义在 frappe/frappe 下。
有关任何 Bench 命令的参考,请查看 Bench 命令。
Frappe 中有四种主要命令类型,在命令执行期间由 Bench 继承。它们可以大致分为
站点命令
用于站点特定操作的一组命令。这些是用于更改站点状态的最常用命令。通过使用 --site 选项以及站点名称(或“all”)来访问这些命令,如果你希望为 bench 上的所有站点运行该操作(如果可能)。这些命令定义在模块 frappe.commands.site 下。
站点创建
在你的 bench 上创建一个新站点。默认情况下,你在 bench 上创建的所有站点都只安装了 Frappe Framework。
bench new-site {site}
有关更多信息和示例,请参阅 bench new-site 参考。
站点备份
你可以使用 Bench CLI 对 bench 上的站点进行备份。你可以管理站点的数据库和文件备份,并对操作有更多控制。
bench --site {site} backup
Bench CLI 还会从你的 bench 目录中删除较旧的备份文件。默认情况下,它会从备份目录中删除超过 24 小时的备份。
有关更多信息和示例,请参阅 bench backup 参考。
站点恢复
Bench CLI 可用于将现有站点恢复到之前的状态。使用 bench restore 命令,可以通过特定的数据库和文件恢复来恢复站点。
bench --site {site} restore {path/to/database/file}
执行恢复操作的最低要求是在本地文件系统上拥有数据库文件。指定的备份文件可以具有 sql.gz 的 sql 扩展名。
有关更多信息和示例,请参阅 bench restore 参考。
部分站点恢复和备份
从版本 13 开始,Frappe 支持进行部分备份并恢复它们。可以直接使用 bench backup 命令进行部分备份。至于部分恢复,可以使用 bench partial-restore 命令将部分备份恢复到现有站点。
有关更多信息和示例,请参阅 bench partial-restore 和 bench backup 参考。
站点应用管理
你可以安装或卸载 Bench 上可用的 Frappe 应用程序。要使用 bench get-app 将应用添加到你的 bench,请查看文档。
应用安装
在你的站点上安装 Frappe 应用程序的最简单方法是通过 Bench CLI。但是,在此之前,该应用程序必须已安装在你的 bench 上。
bench --site {site} install-app {app}
在此操作中,指定站点的应用程序 meta、modules 和 doctypes 会被安装到指定站点上。
应用卸载
卸载站点上已安装的应用。这是一个破坏性操作,包括从站点中删除所有与应用相关的数据。因此,在卸载该应用之前会进行备份。
bench --site {site} uninstall-app {app}
注意:从版本 13 开始,即使未安装在 Bench 上的应用也可以从站点中卸载。
有关更多信息和示例,请参阅 bench uninstall-app 参考。
站点迁移
在特定站点上运行补丁、同步架构并重建文件、翻译和索引。在文档中了解站点迁移的工作原理。
bench --site {site} migrate
有关更多信息和示例,请参阅 bench migrate 参考。
站点删除
删除数据库,并将站点目录从 ./sites 移动到你的 Bench 上的 ./archived_sites (除非另有指定)文件夹。
bench drop-site {site}
有关更多信息和示例,请参阅 bench drop-site 参考。
重置站点数据
从你指定的站点重新安装所有已安装的应用程序。这会完全重置站点。
bench reinstall {site}
有关更多信息和示例,请参阅 bench reinstall 参考。
列出已安装的应用
列出指定站点上安装的所有 Frappe 应用程序。该命令显示的信息来自 已安装应用程序 DocType,它跟踪站点迁移到的应用的最新版本。全局默认 installed_apps 用作回退。
bench --site {site} list-apps
多站点支持已在版本 13 中添加。要查看所有站点的摘要,请将站点的值设为 all 来运行该命令。
有关更多信息和示例,请参阅 bench list-apps 参考。
设置默认站点
有时为每个站点命令输入 --site [sitename] 可能很繁琐。你可以通过设置 FRAPPE_SITE 环境变量来为终端会话设置默认站点。
~/frappe-bench
❯ export FRAPPE_SITE=mysite.localhost
~/frappe-bench
❯ echo $FRAPPE_SITE
mysite.localhost
~/frappe-bench
❯ bench console
Apps in this namespace:
frappe
In [1]: frappe.local.site
Out[1]: 'mysite.localhost'
在浏览器中访问站点
要在浏览器中访问站点,您必须记住 bench 运行的 webserver 端口,然后输入完整的 URL。有一个 bench 命令可以为您完成此操作。
运行以下命令将直接在您的默认浏览器中打开站点 URL。
# open site.local in the browser
$ bench --site site.local browse
# this also works
$ bench browse site.local
您还可以通过传递 --user 选项以用户身份登录。
$ bench --site site.local browse --user [email protected]
$ bench --site site.local browse --user Administrator
Login URL: http://site.local:8000/app?sid=<generated-sid>
</generated-sid>
请注意,此命令:
- 仅当 developer_mode 设置为 1 时,才允许以任何用户身份登录
- 无论 developer_mode 如何,都允许以 Administrator 身份登录
- 仅当用户为 Administrator 时,才打印登录 URL
站点操作、调试和开发
以下是一些您可以通过 Bench CLI 在站点上执行的操作,以更新站点状态。您可能永远不需要使用其中的一些操作,但它们的存在只是为了以防万一。
- add-system-manager:向站点添加新的系统管理员。
- add-user:向站点添加具有特定角色的新用户。
- add-to-hosts:将指定站点添加到您系统的 hosts 文件中。
- build-search-index:为网站构建搜索索引。有关更多信息,请参阅全文搜索 API 文档。
- disable-user:禁用站点上的用户。
- publish-realtime:从 bench 发布实时事件。
- reload-doc:重新加载特定 Doctype 的架构,并刷新指定的 Document
- reload-doctype:重新加载特定 DocType 的架构
- remove-from-installed-apps:从站点的全局值
installed_applications 中移除提到的应用。
- run-patch:通过 Frappe Patch Handler 运行特定补丁。
- execute: 这允许运行一次性 Python 语句
bench --site erpnext.site run-patch 'execute:frappe.db.set_value("User", frappe.session.user, "default_app", "frappe")'
- migrate-to:将您的本地站点迁移到 Frappe Hosting Provider 服务的命令。
- ngrok:创建一个临时 URL 并与任何人分享,他们可以在浏览器中访问您的本地站点。主要用于协助第三方服务的开发。
- set-password:为任何用户设置密码。
- set-admin-password:为 Administrator 用户设置密码。
- set-last-active-for-user:将用户的最后活跃日期设置为当前日期时间。
- start-recording:为指定站点启动 Frappe Recorder。
- stop-recording:终止指定站点的 Frappe Recorder。
- use:设置 bench 上的默认站点。
数据库维护命令
与数据库管理和维护相关的一组命令。这些命令为您的站点数据库提供了更多控制。您可能希望随着时间的推移微调您的部署,以满足站点的需求。
transform-database 命令允许您管理站点表的设置。此时,您可以为站点数据库中的选定表切换 engine 和 row_format 设置。
bench --site {site} transform-database --tables {tables}
有关更多信息和示例,请参阅 bench transform-database 参考。
表修剪
从特定 DocType 中移除的 Docfields 可能不会从其数据库表中删除。这是 Frappe 的设计,以防止过早的数据丢失。这在大多数情况下不会造成问题,但是,在某些时候,您可能会因为残留数据而面临问题。
定期进行表修剪的一些好处是:
- 更小的备份大小
- 减少备份站点所需的时间
- 减少站点数据库使用量
- 在
SELECT * 的情况下优化查询
- 数据库干净,没有任何隐藏或冗余数据
bench trim-tables [OPTIONS]
有关更多信息和示例,请参阅 bench trim-tables 参考。
数据库修剪
从列表视图中删除 DocTypes 可能不会从数据库中删除其对应的表。迁移有时可能会在您的站点数据库中留下幽灵表。这样做可能是为了冗余、在数据损坏或丢失时进行恢复,或者仅仅是出于人为错误。
bench trim-database [OPTIONS]
有关更多信息和示例,请参阅 bench trim-database 参考。
调度器命令
用于管理和查看 bench 上站点的调度器和后台作业状态的命令。定义在模块 frappe.commands.schedule 下。
- disable-scheduler:禁用指定站点的调度器。
- doctor:获取有关所有站点(如果未指定)的调度器状态以及 bench 上活动工作进程的诊断信息。
- enable-scheduler:为指定站点启用调度器。
- purge-jobs:清除任何待处理的周期性任务,如果未给出 event 选项,它将清除站点的一切。
- ready-for-migration:通过检查是否存在任何待处理的后台作业来检查特定站点是否已准备好迁移。
- scheduler:将任何站点的调度器状态从 pause、resume、disable 或 enable 状态更改。
- set-maintenance-mode:为指定站点在配置中设置维护模式的值。
- show-pending-jobs:获取有关后台作业的诊断信息。
- schedule:为你的 bench 启动调度器进程。该进程管理在
hooks.py 文件中定义的调度事件。你也可以在你的进程管理器的 bench 配置中找到这个命令。
- worker:在你的 bench 上启动 worker 进程。该进程将管理在此 bench 上启动的所有后台任务。
- trigger-scheduler-event:为指定的站点触发特定的调度事件。
Frappe 实用命令
Frappe 实用命令既可以针对站点,也可以针对 bench。这些命令定义在 frappe.commands.utils 模块下。
显示站点配置
你站点所应用的配置是 bench 目录下的 common_site_config.json 和站点自身的 site_config.json 组合后生效的。你可以在这里了解更多相关信息。Bench 提供了一个界面来查看你站点所应用的 frappe.conf 值。你可以选择以表格或 JSON 格式访问这些信息。
bench --site {site} show-config
更多信息和示例,请参阅 bench show-config 参考文档。
更新站点配置
Bench 提供了一个包装命令,用于在站点配置文件中插入或更新值。你可以通过同一个命令更新站点 site_config.json 中的值,以及 bench 目录下的 common_site_config.json。
bench --site {site} set-config KEY VALUE
更多信息和示例,请参阅 bench set-config 参考文档。
显示已安装应用的版本
version 命令会显示所有已安装的应用及其版本。
bench version [OPTIONS]
从版本 13 开始,引入了 -f / --format 选项。该选项允许你显示有关分支和最近提交的额外信息。更多信息和示例,请参阅 bench version 参考文档。
更多命令
- add-to-email-queue:向邮件队列添加一封邮件。
- build:为 bench 上安装的 Frappe 应用构建资源。
- bulk-rename:通过 CSV 文件批量重命名多条记录。示例文件格式(不含表头):
| 旧名称 |
新名称 |
合并 |
| HR-EMP-00001 |
EMP0001 |
FALSE |
| HR-EMP-00002 |
EMP0002 |
FALSE |
| HR-EMP-00003 |
EMP0003 |
FALSE |
| HR-EMP-00004 |
EMP0004 |
FALSE |
| HR-EMP-00005 |
EMP0005 |
FALSE |
| HR-EMP-00006 |
EMP0006 |
FALSE |
- clear-cache:清除缓存、doctype 缓存和默认值。
- clear-website-cache:清除网站缓存。
- console:为站点启动一个 IPython 控制台。配合
--autoreload 标志使用可自动重新加载代码更改。
- data-import:使用数据导入功能从 CSV 或 XLSX 批量导入文档。
- destroy-all-sessions:清除所有用户的会话(使其登出)。
- execute:使用给定的
args 和 kwargs 执行特定的函数或方法。
- export-csv:导出包含 DocType 数据的导入模板。
- export-doc:将单个文档导出为 CSV。
- export-fixtures:将站点中的记录导出为 JSON 文件到你的 Frappe 应用中。Fixtures 在你的应用的
hooks.py 文件中定义。
- export-json:将文档列表以 JSON 格式导出到指定路径,使用 ‘-‘ 作为 Singles 的名称。
- import-csv:使用数据导入功能从你的 CSV 文件导入。
- import-doc:导入(插入/更新)文档列表。如果参数是一个目录,则导入所有以
.json 结尾的文件
- jupyter:启动一个 Jupyter Notebook 服务器。
- make-app:创建一个 Frappe 应用模板。
- db-console:为你的站点启动交互式数据库控制台。此命令是以下命令的别名:mariadb、postgres
- mariadb:为 mysql 站点启动 MySQL 交互式控制台。
- postgres:为 postgres 站点启动 PostgreSQL 交互式控制台。
- rebuild-global-search:在当前站点中设置帮助表(在 migrate 之后调用)。
- request:以 Administrator 身份向某个路径发起带参数的请求。
- reset-perms:将所有 DocType 的权限重置为默认设置。
- run-tests:在指定站点上运行 Python 测试。
- run-parallel-tests:在 CI 上并行运行 Python 测试。
- run-ui-tests:运行 Cypress UI 测试。
- serve:为 bench 启动 Web 服务器。
- watch:监视并在 JS 和 CSS 文件发生变化时进行合并。
翻译命令
有两种方式管理翻译。在 v15 之前,翻译通常基于 CSV 文件。从 v16 开始,frappe 使用 GNU Gettext 的 .po 文件格式来管理翻译。自定义应用可以继续提供基于 CSV 的翻译,也可以切换到新格式。
CSV 文件
一组用于管理基于 CSV 的翻译文件的命令。这些命令定义在 frappe.commands.translate 模块下。
- build-message-files:为翻译构建消息文件。
- get-untranslated:获取指定语言的未翻译字符串。
- migrate-translations:将目标应用专属的翻译从源应用迁移到目标应用
- new-language:为指定应用创建一个
[lang].csv 文件。
- update-translations:在文件之间更新指定语言的翻译。
Gettext / PO 文件
用于管理基于 Gettext 的翻译文件的命令集。这些命令定义在模块 frappe.commands.gettext 下。
- generate-pot-file:生成一个 POT 文件。这会创建包含你应用中所有可翻译字符串的基础文件,并作为特定语言翻译文件的模板。
- compile-po-to-mo:将 PO 文件编译为 MO 文件。PO 文件是人类可读的。在生产环境中,翻译是从 MO 文件中读取的,其中翻译被编译为优化的二进制格式。此命令会从你的 PO 文件创建 MO 文件(为方便起见,此命令也会由 bench build 触发)。
- migrate-csv-to-po:将你应用的翻译从 CSV 文件(旧)迁移到 PO 文件(新)。请先运行 generate-pot-file。
- update-po-files:将语言的 PO 文件与 POT 文件同步。这样,新的可翻译字符串会被添加到你的 PO 文件中,你可以在那里进行翻译,而过时的字符串则可以被移除。你可能需要先运行 generate-pot-file。
- create-po-file:为一种新语言创建一个新的(未翻译的)PO 文件。