
用 Rust 重写 RailsLoco为个人开发者与初创项目打造的全栈 Rust Web 框架【免费下载链接】loco The one-person framework for Rust for side-projects and startups项目地址: https://gitcode.com/GitHub_Trending/lo/locoLocoloco-rs是一个受 Ruby on Rails 启发、基于 Rust 与 Axum 构建的全栈 Web 框架其核心理念是The One Person Framework一个人的框架让独立开发者、业余爱好者和初创团队仅靠一台小服务器就能把想法做成产品。本文以官方博客《What if Rails was Built on Rust?》为骨架结合当前仓库源码带你完整理解 Loco 的定位、特性全景、设计哲学与上手路径。假如 Rails 是用 Rust 写出来的Rails 之所以伟大在于它用 Ruby 的优雅把 Web 开发的繁琐细节——路由、控制器、ORM、认证、邮件、任务调度——全部封装成了近乎魔法的约定。那么问题来了假如 Rails 不是用 Ruby而是用 Rust 构建会长什么样官方博客给出的答案是长这样。async fn current( auth: middleware::auth::Auth, State(ctx): StateAppContext, ) - ResultResponse { let user users::Model::find_by_pid(ctx.db, auth.claims.pid).await?; format::json(CurrentResponse::new(user)) } pub fn routes() - Routes { Routes::new().prefix(user).add(/current, get(current)) }短短十几行代码包含了一个真实业务接口的全部要素认证提取器middleware::auth::Auth作为 axum 的提取器extractor自动注入在进入控制器之前完成 JWT 校验。在 extractor/auth.rs 中JWT与JWTWithUser通过实现FromRequestParts从Authorization头Bearer前缀或 Cookie 中解析并验证令牌再把 claims 交给处理器JWTWithUser还会用T::find_by_claims_key回查数据库、加载真实用户记录源码见 extractor/auth.rs。应用上下文State(ctx): StateAppContext注入AppContext其中封装了数据库连接、队列、配置、邮件发送器、存储、缓存与共享存储等运行期资源见 app.rs。ORM 查询users::Model::find_by_pid(ctx.db, ...)是典型的 SeaORM ActiveRecord 风格查询。内容感知的响应format::json(...)直接返回 JSON 响应同族 API 还有format::text、format::html、format::yaml、format::empty等见 format.rs。声明式路由Routes::new().prefix(user).add(/current, get(current))把GET /user/current挂到路由上。Routes还支持nest嵌套、merge/merge_all合并多组路由便于按控制器组织AppRoutes见 routes.rs 及其单元测试。这就是 Loco 的日常开发形态Rust 的安全性、强类型与并发模型配上 Rails 式的表达力与约定。认识 Loco几乎包含 Rails 的全部特性Loco 是一个 Rails 启发的 Rust Web 框架它几乎涵盖了 Rails 的每一项特性并尽量以符合 Rust 工程习惯的方式呈现特性说明仓库对应实现控制器与路由基于Axum构建src/controller/routes、format、middleware、views模型、迁移与 ActiveRecord基于SeaORMsrc/model/Cargo.toml视图基于serde的 JSON 视图结构体序列化src/controller/views/后台任务多模式进程内、进程外、Tokio 异步队列src/bgworker/pg、redis、sqlt邮件Mailers后台投递邮件src/mailer/docs-site/content/docs/processing/mailers.md任务Tasks面向业务的命令行任务src/task.rsdocs-site/content/docs/processing/task.md数据填充Seeding数据库种子数据src/app.rsseedhook环境感知配置development/test/production 分阶段配置src/config.rsloco-new/base_template/config/日志与追踪通过tracing无缝集成src/logger.rs代码生成器控制器、模型、迁移、脚手架等loco-gen/loco-cli/开箱即用的认证类似 Rails 的devisesrc/auth/、src/controller/extractor/auth.rs测试工具包自动清表、fixture 填充、自动迁移、快照与脱敏src/testing/tests/调度器 / 缓存 / 存储定时任务、缓存层、多后端存储src/scheduler.rs、src/cache/、src/storage/正如博客所言Its full stack for real.——它是一个真正的全栈框架而不仅仅是又一个 Web 服务器库。从 Cargo.toml 的依赖与 feature 定义也能看出这套全家桶的厚度auth_jwt、with-db、cache_inmem/cache_redis、bg_redis/bg_pg/bg_sqlt、storage_aws_s3/storage_azure/storage_gcp、embedded_assets等见 Cargo.toml。默认开启auth_jwt cli with-db cache_inmem bg_redis bg_pg bg_sqlt意味着一个新项目开箱即可获得认证、CLI、数据库、缓存与三种后台队列后端。为什么不用 Rails这是官方博客里一个坦诚且务实的观点值得完整保留如果你对 Ruby 满意那就用 Rails。不要因为性能去折腾别的——Rails 和 Ruby 已经足够好。但如果你热爱 Rust你现在可以用 Loco 像 Rubyists 多年来做的那样去构建公司产品你会获得Rust 的安全性、强类型、出色的并发模型以及极其稳定的库与生态——构建一次然后忘掉它build once, then forget about it。部署就是把单个二进制文件拷贝到服务器上。官方博客给出的参考数据是无需任何额外调优即可达到约10 万 req/s带数据库调用时约5 万 req/s这些数字来自原文作者表述实际表现取决于机器与场景通常几台服务器就绰绰有余甚至部署到树莓派也能跑得很开心。换句话说Loco 的定位不是替代 Rails——它针对的是想要 Rust 的一切优点、同时又不愿放弃 Rails 式开发效率的那批人。仓库 README 用一句话概括了这一立场 Loco is Rust on Rails.见 README.md。The One Person Framework一个人的框架Loco 的指导原则源于 DHH 的《The One Person Framework》一文官方博客将其确立为凌驾于一切之上的准则。由这一条原则可以推导出 Loco 的全部设计取舍没时间争论库选型、工具链和 lint 规则强观点是被欢迎的。告诉我该怎么做——Loco 直接替你做好决定。除了脑力还需要一个驾驶工具这就是 Loco CLI。生成代码、运维项目全由命令行驱动实现见 loco-cli/ 与生成器 loco-gen/。需要稳定任何破坏都是浪费时间任何意外都是浪费时间。需要简单不要给我惊喜。需要单一的运维叙事部署要简单。没有 Kubernetes、没有 IaC、没有前置条件。需要掌控感邮件要能在本地撰写与发送而不是依赖某个远程服务。需要本地优先生产环境发生的一切都应当先在开发环境、本地复现。需要即兴发挥ad-hocness不要神圣化流程。想给用户发生日邮件直接写个任务task跑一遍而不是为此启动一个Admin大工程。Loco 就是为独立开发者indy hackers、业余爱好者和初创团队打造的一个人的框架。这一哲学在代码层面同样有迹可循框架通过Hookstrait 提供了routes、connect_workers、register_tasks、seed、truncate、initializers、before_run/after_routes等一整套约定式扩展点见 app.rs让一个人也能把整个应用的接线工作做完脚手架模板 loco-new/base_template/ 则直接生成一个基础设施就绪的完整项目骨架。一个人撑起一家公司需要多小的成本博客给出的答案是约 20MB 的部署二进制、5 万 req/s原文数据你需要的只是一台小/中型服务器Postgres 或 SQLite一条网络连接。Startups should be cheap!——初创项目本就该便宜。这就是 Loco 想帮你达到的运营形态成本极低、部署极简、单人可维护。上手从安装到第一个响应与一个人框架的定位一致Loco 的上手路径也完全是 CLI 驱动的详见 docs-site/content/docs/getting-started/guide.md。第一步安装cargo install loco cargo install sea-orm-cli # 仅在需要数据库时安装第二步创建新项目选择 SaaS app 可获得内置认证❯ loco new ✔ ❯ App name? · myapp ✔ ❯ What would you like to build? · Saas App with client side rendering ✔ ❯ Select a DB Provider · Sqlite ✔ ❯ Select your background worker type · Async (in-process tokio async tasks) Loco app generated successfully in: myapp/ - assets: Youve selected clientside for your asset serving configuration. Next step, build your frontend: $ cd frontend/ $ npm install npm run build第三步启动服务$ cd myapp $ cargo loco start启动后cargo loco这个 CLI 会同时负责开发服务器的运行与日常运维操作。新项目会得到一套按约定组织的目录结构controllers、models、views、workers、mailers、fixtures、tasks、tests、config 等每个目录放什么、怎么接线都已由约定定死——这正是约定优于配置的体现。如果想先快速体验再深究原理可以参考官方的快速导览 docs-site/content/docs/getting-started/tour/想要更多起步模板可以查看 docs-site/content/docs/getting-started/starters.md。结语Loco 回答了假如 Rails 用 Rust 构建这一思想实验它把 Rails 的约定优于配置、脚手架、全栈特性与 Rust 的安全、性能和单二进制部署结合起来收敛成一套服务于一个人的框架。无论你是想用 Rust 快速验证一个想法、构建业余项目还是经营一家小规模初创公司都可以从cargo install loco loco new开始感受一次单人全栈的开发体验。更深入的使用细节认证、部署、邮件、后台任务、WebSocket 等可以在仓库的 docs-site/content/docs/ 文档集中继续探索。【免费下载链接】loco The one-person framework for Rust for side-projects and startups项目地址: https://gitcode.com/GitHub_Trending/lo/loco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考