本地开发

从根目录启动环境:

bash child/dev.sh

需要 Goat CLI、qtc、Docker、Python 3 以及项目配置。端口来自 .env 中的变量 GOAT_DEV_APP_PORT 和 GOAT_DB_MAIN_PORT。

主机 Supervisor 会在新的 Goat 进程中生成应用,然后启动 herd/dev.goat:PostgreSQL、后端以及 Angular foundation/child 监视器。它会监视模型、生成器模板、child 后端和静态资源。发生更改后,它会在重新生成和重启之前停止相关进程。独立进程允许重新加载模型,因为 CLI 无法在同一会话中初始化两次模型。

数据库和 fixtures

开发环境会保留现有的 PostgreSQL 数据。启动时会先执行 foundation 迁移,再执行 child 迁移;不会自动运行 db:clean。需要显式启动 fixtures 和 pgAdmin:

goat run:script --path=herd/fixture.goat
goat run:script --path=@goatcms/herd/db/admin.goat

foundation 应用运行于 /app/,独立的 child 前端运行于 /child/。Angular 监视器会构建各自的 workspace;共享库来自生成的 foundation。

构建和测试

bash child/build.sh
goat run:script --path=herd/test.goat
GOWORK=off go test ./...
(cd goatapp && GOWORK=off go test ./...)

构建会生成源代码、构建两个前端,并编译 .tmp/bin/goatcms。原始资源会在编译期间嵌入。Dockerfile 同样会构建两个前端,并将其产物放入生产镜像中。

集成测试需要 GOAT_TEST_DSN,它应指向一个允许创建临时 schema 的测试数据库。GOAT_TEST_LEGACY_SCHEMA 指向更新前保存的 SQL 快照,用于迁移测试。缺少这些数据时,测试会被明确跳过。