Rust off Rails:面向 AI 时代的固执己见型 Web 技术栈

Hacker News Top 工具

摘要

Rust off Rails 引入了一套以 AI 为核心的固执己见型 Web 技术栈,它以 Markdown 约定的形式发布,而非代码。它引导编程智能体(如 Claude Code)生成全栈 Rust 应用程序,遵循一套统一且唯一的决策方案。该项目强调所有代码均由 AI 编写,人类只需提供意图、规格说明和回答访谈式的问题。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/21 18:23

# Rust off Rails:为 AI 时代打造的固执己见的 Web 技术栈 来源:https://rustoffrails.org/ 一个不附带任何代码的 Web 框架 Rust off Rails 是一套 Markdown 文件,它告诉编码智能体如何构建一个全栈 Rust Web 应用:一个钦定的技术栈、一种布局、每件事只有一种做法。**约定写在文字里,代码由智能体来写。** `` curl -fsSL https://rustoffrails.org/install.sh | sh `` 或在 Claude Code 中:`/plugin marketplace add rust-off-rails/rustoffrails` 在你执行之前请先阅读:安装脚本 (https://rustoffrails.org/install.sh) · INSTALL.md (https://github.com/rust-off-rails/rustoffrails/blob/main/INSTALL.md) Railboard:由 AI 用 7 次提示构建的实时看板 3:06 · 在 YouTube 观看 (https://www.youtube.com/watch?v=k65vA28_JT8) - **0** 行框架代码 - **60** 个 Markdown 文件 - **2** 个数据库,同一份代码 ~/code/bookshelf, claude 一次图解的智能体会话:`/offrails:new` 命令、访谈、计划、生成的文件,以及在 SQLite 和 Postgres 上全部通过的测试。 1. \>/offrails:new bookshelf:人们跟踪和评论书籍,之后要为移动端提供 API 2. ● 正在读取 AGENTS.md → 访谈 · 教条 · 结构 · 技术栈 · 工作流 3. ? 账户体系?a) magic link(推荐)b) 邮箱 + 密码 c) 仅限邀请 d) 无需账户 4. › a 5. ? 谁拥有数据?a) 每个用户(推荐)b) 团队 c) 共享 6. › you decide 7. ? 前端?a) htmx(推荐)b) inertia c) spa d) api 8. › b 9. ? UI 库?a) React(推荐)b) Svelte 10. › b 11. ? 为其他程序提供 API?a) 无 b) REST + OpenAPI c) GraphQL d) 两者都要 12. › b 13. ◆ 计划:inertia + Svelte · API 用 REST · 生产环境 Postgres(本地 SQLite) 14. Book title, author, rating 1–5 · belongs to User 15. Review body, stars 1–5 · belongs to Book 16. API /api/v1/books, /api/v1/reviews · bearer tokens 17. › yes 18. \+migration/src/m20261013\_120000\_create\_books\.rs 19. \+src/models/book\.rs · src/controllers/books\.rs 20. \+web/src/pages/Books/Index\.svelte(\+ 71 more) 21. ✓cargo clippy \-\-all\-targets \-\- \-D warnings 22. ✓pnpm \-\-dir web typecheck · svelte\-check 23. ✓cargo nextest run · **SQLite** · 142 passed 24. ✓cargo nextest run · **Postgres 18** · 142 passed 25. 完成定义:全绿。运行 `bin/setup && bin/dev` 它是什么 ## 一个由*决策*构成的框架,而非由代码构成。 其他框架发布的是一个库。Rust off Rails 给你的智能体的是判断力:它本会即兴发挥的每一个选择,都已经做出并记录在案。 创始规则 ### 所有代码均由 AI 编写 每一行 Rust、SQL、HTML、CSS、TypeScript,以及每一个 Dockerfile,都由智能体编写。人类只写意图:`product/` 中的需求文档、访谈中的回答、对话中的反馈。永远不写代码。这是其他一切所依赖的规则:样板代码是免费的,约定由智能体来执行,规格文档始终保持为事实的唯一来源。阅读 §0 (https://rustoffrails.org/philosophy#pillar-0)。 ### Markdown 就是框架 框架本应发布一个库,而 Off Rails 发布的是一份精确的规格。任务队列、会话管理和 Inertia 适配器,都以代码的形式渲染到你的应用中,代码归你所有。 ### 强烈的观点,面向智能体 Crate 选择、文件布局、命名、错误处理、测试:一次决定,永久生效。智能体永远不需要争论用哪个 ORM。不一致才是敌人,而非不完美。 ### 开箱即用 认证、任务队列、邮件、缓存、文件上传、实时通信、部署:每一层都有指南和配方,智能体永远不需要从空白页开始。浏览指南 (https://rustoffrails.org/docs)。 它如何工作 ## 访谈。计划。生成。*绿灯。* 智能体只问人类能回答的问题,把答案记录下来,并且只有当编译器和两个数据库上的测试套件都同意时才算完成。 1. 01 ### 访谈 仅询问产品层面的问题,每个问题都有推荐的默认值。"谁能看到这个?"会问;"用哪个 ORM?"永远不会。说"你决定",它就会采用默认值。 2. 02 ### 计划 一份紧凑的计划(资源、页面、任务、假设),连同验收标准一起写入 `product/` 规格文档中。规格文档是持久记录;聊天记录不是。 3. 03 ### 生成 生成器配方,由智能体执行:迁移 → 模型 → 失败的测试 → 控制器 → 视图,每次一个垂直切片。 4. 04 ### 绿灯 fmt、clippy、在 SQLite *和* Postgres 上运行测试,每条验收标准都追溯到一个测试,覆盖率门槛。全绿,否则就不算完成。 ### 八个技能,各司其职 技能 它做什么 `/offrails:new` 访谈 → 计划 → 应用骨架 → 计划中的功能,绿灯 `/offrails:feature` 先写规格,再写代码。不带参数时:构建 `product/` 中变更的内容 `/offrails:scaffold` 以应用的前端模式创建一个完整的资源 `/offrails:generate` 任务队列、邮件器、频道、认证、模型、迁移、任务 `/offrails:check` 完成定义:fmt、clippy、在 SQLite 和 Postgres 上运行测试 `/offrails:doctor` 对照文档中的每条约定审计应用 `/offrails:deploy` 部署配置和已验证的镜像;对外暴露前先确认 `/offrails:upgrade` 将应用内嵌的框架向前推进,并迁移约定 你将如何使用它 ## 你写意图,智能体写*其他一切*。 1. 1 **说出你想要什么**,或写在 `product/features/*.md` 中。用普通英语即可。 2. 2 **智能体先写规格,再写代码**:迁移、模型、视图、测试。 3. 3 **完成意味着在 SQLite 和 Postgres 上全绿**,每条验收标准都有测试覆盖。 阅读指南 (https://rustoffrails.org/guide) 这笔交易 ## 当打字变得免费时,什么会改变。 数十万行代码的库 60 个 Markdown 文件 代码生成器二进制文件 `generators/scaffold.md`:智能体执行的配方 约定优于配置 约定优于*商议*:智能体永远不会争论该用哪个 crate 为程序员的幸福感而优化 为智能体的正确性而优化:一切都有编译器检查 用魔法来节省击键 没有魔法。当你不需要打字时,显式代码是廉价的。 技术栈一句话概括 ## 一个 crate 干一件事。不接受替换。 Axum · Tokio · SeaORM 本地用 SQLite,生产用 Postgres,同一份代码 · Askama · Tailwind · lettre · tracing · 单个二进制文件,单个 Docker 镜像 ### `FRONTEND_MODE`,在访谈中一次选定 `htmx`(默认) Askama 模板,编译时检查,加上 htmx。无需 Node。适用于 CRUD 应用、仪表盘、内容网站(比如这个)。 `inertia` React 或 Svelte 页面,配服务端路由和控制器,通过一个生成的 Inertia 适配器实现。想要 JS UI 时的首选。 `spa` 一个独立的单页应用加上 JSON API,适用于 UI 必须是独立应用的场景。类型通过 `ts-rs` 从 Rust 流转。 `api`(进行中) 完全没有 UI:一个后端和一个带版本的 API,供移动端、合作伙伴和脚本使用。 `UI_LIBRARY`:`react`(默认)或 `svelte`,用于 `inertia`、`spa` 和 htmx islands `API`:`none`、`rest`(OpenAPI + tokens)、`graphql` 或 `both`:一个公开的、带版本的 API,独立于 UI 数据库中还包含:任务队列、缓存和 pub/sub。**数据库是唯一的基础设施。** 站在巨人的肩膀上 ## Rails 和 Phoenix 的精华,*合二为一*。 这里没有任何一个好点子是新的。我们从两个我们热爱的框架中取了经受住时间考验的部分,为每个部分赋予 Rust 的形态,然后为智能体把它们写下来。 ### 来自 Ruby on Rails - 约定优于配置 (https://rustoffrails.org/philosophy),提炼为约定优于商议 - 生成器 (https://rustoffrails.org/docs/generators/scaffold):`rails new` 和 scaffold,变成智能体执行的配方 - Active Record (https://rustoffrails.org/docs/guides/models) → 模型和迁移 (https://rustoffrails.org/docs/guides/migrations) - Rails 8 认证 (https://rustoffrails.org/docs/guides/auth):基于数据库的会话,生成后归你所有 - Solid Queue (https://rustoffrails.org/docs/guides/jobs)、Cache (https://rustoffrails.org/docs/guides/caching) 和 Cable (https://rustoffrails.org/docs/guides/realtime):数据库就是基础设施,不需要 Redis - Turbo 8 页面刷新广播 (https://rustoffrails.org/docs/guides/realtime) → 通过 SSE 传递信号 - Action Mailer 预览 (https://rustoffrails.org/docs/guides/mailers) - Kamal、`/up` 和 Docker (https://rustoffrails.org/docs/guides/deployment) 默认就有 - `bin/rails` 任务 (https://rustoffrails.org/docs/cli) → 单个 `app` 二进制文件 - 凭据和环境变量纪律 (https://rustoffrails.org/docs/guides/config) ### 来自 Elixir 和 Phoenix - Oban (https://rustoffrails.org/docs/guides/jobs):持久化任务,带状态、唯一任务、定时任务、延迟重试 - Oban Web (https://rustoffrails.org/docs/guides/jobs-dashboard) → 实时的 `/admin/jobs` 仪表盘 - Swoosh 的本地邮箱 (https://rustoffrails.org/docs/guides/mailers) → `/dev/mailbox` - phx.gen.auth (https://rustoffrails.org/docs/guides/auth):magic links 以及"查看你的收件箱"开发提示 - LiveDashboard (https://rustoffrails.org/docs/guides/dev-tools) → `/dev` 工具箱 - 待执行迁移页面 (https://rustoffrails.org/docs/guides/dev-tools),带"运行迁移"按钮 - Ecto 的显式数据层 (https://rustoffrails.org/docs/guides/models):changesets,没有回调 - Channels、Presence 和 PubSub (https://rustoffrails.org/docs/guides/realtime)(进行中) - 分布式节点和"let it crash"监督机制 (https://rustoffrails.org/docs/guides/deployment)(进行中) 还有 - htmx (https://rustoffrails.org/docs/guides/frontend-htmx) - Inertia.js (https://rustoffrails.org/docs/guides/frontend-inertia) - Tailwind (https://rustoffrails.org/docs/guides/views) - shadcn 风格的自有组件 (https://rustoffrails.org/docs/stack) - ts-rrs 端到端类型 (https://rustoffrails.org/docs/guides/frontend-react) - Svelte (https://rustoffrails.org/docs/guides/frontend-svelte) - Playwright (https://rustoffrails.org/docs/guides/testing) 实战检验 ## 真实的应用,*由智能体移植而来*。 智能体将广受喜爱的开源应用移植到 Rust off Rails。它们遇到的每一个磕磕绊绊,都会回馈到框架中。 - 移植自 Fizzy(进行中) ### fizzyer (https://rustoffrails.org/field-tests#fizzyer) Fizzy 的看板和卡片,由智能体用 Rust 重建。 - 移植自 FreeScout(进行中) ### A FreeScout 移植版 (https://rustoffrails.org/field-tests#freescout) 一个共享收件箱的客服台,由另一台机器上的智能体构建。 - 移植自 Uptime Kuma(已完成) ### uptime-offrails (https://rustoffrails.org/field-tests#uptime-offrails) 在 SQLite 和 Postgres 上 1530 个测试全部通过。 开始使用 ## 安装插件。描述你的应用。*然后观看。* ### 1 使用 Claude Code(推荐) `` /plugin marketplace add rust-off-rails/rustoffrails /plugin install offrails@offrails `` 然后,在一个空目录中: `` /offrails:new bookshelf:人们跟踪自己读过的书并撰写评论 `` 智能体访谈你,确认计划,然后开始构建。技能也可以在普通请求中触发("帮我创建一个新的 Rust Web 应用……")。 ### 2 使用 Codex、Cursor 或任何能读取 `AGENTS.md` 的智能体 `` Read /path/to/rustoffrails/AGENTS.md and make me a new app called "bookshelf". `` 生成的应用自带 `AGENTS.md` 和一个内嵌的 `.offrails/`,因此后续的会话无需任何设置。 ### 3 然后 用普通语言描述功能,或写成规格文档放在 `product/` 中: `` Scaffold Book with title:string, author:string, published_on:date, rating:integer. Users must be logged in to create books. `` 完整教程 (https://rustoffrails.org/start) 你将如何使用它 (https://rustoffrails.org/guide) 阅读文档 (https://rustoffrails.org/docs) 在 GitHub 上点 Star (https://github.com/rust-off-rails/rustoffrails)

相似文章

从Rust到Ruby

Hacker News Top

开发人员描述使用LLM将一个15,000行的Rust Web应用转换为Ruby on Rails,发现Ruby版本明显更短,并评估了开发速度、安全性和可测试性方面的权衡。