SuperAPI AI 工具集

unopim-exec

部署与运维

查看项目

更新于 10-16 04:20

技能介绍

UnoPim Exec 是一个面向 UnoPim 项目的环境探测技能,用于在运行任何 shell 命令之前先解析当前工作区的实际运行环境。

用途

在 UnoPim 项目中,同一个分支的多个检出可能同时存在于一台机器上,分别以容器或宿主机方式运行,使用不同的服务端口、数据库主机和 Elasticsearch 配置。如果直接套用某个环境中正确的命令,在另一个环境中就可能失败。例如,针对宿主机 MySQL 运行 vendor/bin/pest 的命令,在 .env 指向容器主机名、服务端口不同或 Elasticsearch 被禁用时就会出错。该技能的作用就是在执行命令前先探测环境,避免这类问题。

主要能力

该技能提供 detect-env.sh 脚本,针对项目根目录运行一次,输出恰好五行 KEY=VALUE,便于解析。输出的键包括:

  • WRAPPER:命令前缀,可能是 php,也可能是 docker compose exec -T <service> php 形式,用于宿主机没有 PHP 的情况。
  • APP_URL:当前检出实际提供服务的 URL,也可用于 Playwright 的 BASE_URL。
  • DB_OVERRIDE:当配置的 DB_HOST 在当前 shell 中无法解析时,输出 DB_HOST=127.0.0.1。
  • ES_OVERRIDE:当 Elasticsearch 主机无法解析且检出尚未禁用时,输出 ELASTICSEARCH_ENABLED=false。
  • PEST_ENV:将上述两个覆盖参数合并,可直接作为命令前缀使用,例如 env $PEST_ENV vendor/bin/pest。

空值表示“无需覆盖”,而不是“未知”。即使检出没有 .env 文件,脚本也会以退出码 0 结束,因此缺少文件不会成为硬性阻断。

使用方式

每个会话运行一次,可在任意位置针对项目根目录执行:

skills/unopim-exec/detect-env.sh "$PROJECT_ROOT"

如果 detect-env.sh 不可用,可以在执行第一条命令前手动读取配置:从 .env 读取 APP_URL、DB_HOST、DB_PORT、DB_PREFIX、ELASTICSEARCH_ENABLED 和 ELASTICSEARCH_HOST;从 docker-compose.yml(以及存在时的 docker-compose.apache.yml)判断哪些服务是容器化的。在运行任何命令之前,先说明检测到的配置及其原因。

适用场景

适用于需要在 UnoPim 项目中运行 shell 命令、执行测试或启动服务的场景,尤其是同一台机器上存在多个检出、环境配置不一致的情况。也适用于需要为 Playwright 等工具确定 BASE_URL 的场景。

限制与注意事项

不要假设服务运行在 127.0.0.1:8000,应读取 APP_URL,不要猜测端口。不要只覆盖数据库而忽略 Elasticsearch:模型观察者会在分类和产品写入时触发,因此即使测试不涉及搜索,不可达的 Elasticsearch 主机也会导致测试失败。不要把无法解析的主机名当作应用缺陷:getaddrinfo 失败和 NoNodeAvailableException 属于环境故障,应使用 PEST_ENV 重新运行,而不是“修复”代码。不要把探测到的值硬编码进技能、脚本或任何提交的文件中:探测结果可移植,但主机、端口和凭据不可移植,且绝不能提交。