任务

Loco 中的任务充当临时功能,用于处理应用程序的特定方面。无论您需要修复数据、发送电子邮件、删除用户还是更新客户订单,为每种场景创建专门的任务都能提供灵活高效的解决方案。虽然任务需要手动执行,但这项投入是值得的,原因如下:

  • 手动工作自动化: 任务可以自动化手动流程,简化重复性操作。
  • 利用熟悉的组件: 在任务中利用应用程序的模型、库和现有逻辑。
  • 消除 UI 开发: 任务不需要构建用户界面,而是专注于后端操作。
  • UI 自动化的潜力: 如有必要,可以通过与 Jenkins 等作业运行工具集成,使用 UI 自动化任务。

每个任务都旨在将命令行参数解析为标志,利用 CLI 的 yargs 解析输出。

使用 CLI 生成器创建任务

Loco 提供了一个方便的代码生成器,以简化连接到项目的启动任务的创建。使用以下命令生成任务:

生成任务:

Generate a Task based on the given name
用法: demo_app-cli generate task [选项] <名称>

参数:
  <NAME>  Name of the thing to generate
  <名称>  要生成的事物的名称

选项:
  -e, --environment <ENVIRONMENT>  Specify the environment [default: development]
  -e, --environment <ENVIRONMENT>  指定环境 [默认: development]
  -h, --help                       Print help
  -h, --help                       打印帮助
  -V, --version                    Print version
  -V, --version                    打印版本

运行任务

使用以下命令执行在上一步中创建的任务:

cargo loco task <TASK_NAME>
cargo loco task <任务名称>

列出所有任务

要查看已执行的所有任务的列表,请使用以下命令:

cargo loco task
cargo loco task

手动创建任务

如果您更喜欢在 Loco 中手动创建任务,可以按照以下步骤操作:

1. 创建任务文件

首先在 src/tasks 路径下创建一个新文件。例如,我们创建一个名为 example.rs 的文件:

use loco_rs::prelude::*;

pub struct Foo;
#[async_trait]
impl Task for Foo {
    fn task(&self) -> TaskInfo {
        TaskInfo {
            name: "foo".to_string(),
            detail: "run foo task".to_string(),
            detail: "运行 foo 任务".to_string(),
        }
    }
    async fn run(&self, _app_context: &AppContext, _vars: &task::Vars) -> Result<()> {
        Ok(())
    }
}

2. 在 mod.rs 中加载文件

接下来,确保在 src/tasks 文件夹下的 mod.rs 文件中加载新创建的任务文件。

3. 在 App Hooks 中注册任务

在您的 App hook 实现中(例如,App struct),在 register_tasks 函数中注册任务:

// src/app.rs

pub struct App;
#[async_trait]
impl Hooks for App {
    ...

    fn register_tasks(tasks: &mut Tasks) {
        tasks.register(tasks::example::ExampleTask);
    }

    ...
}

这些步骤确保您手动创建的任务(例如 ExampleTask)已集成到 Loco 的任务管理系统中。