2023-11-24

如果 Rails 基于 Rust 构建会怎样?

Team Loco

如果 Rails 基于 Rust 而不是 Ruby 构建会怎样?

那么它会看起来像这样:

async fn current(
    auth: middleware::auth::Auth,
    State(ctx): State<AppContext>,
) -> Result<Response> {
    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))
}

隆重介绍:Loco

Loco 是一个受 Rails 启发的 Rust Web 框架。它包括 几乎所有 Rails 的功能,并尽力提供符合 Rust 习惯的用法:

  • 控制器和路由,通过 axum
  • 模型、迁移和 ActiveRecord,通过 SeaORM
  • 视图,通过 serde
  • 无缝的后台任务,通过 sidekiq-rs,多模式:进程内、进程外、异步通过 Tokio
  • 邮件发送器 (Mailers)
  • 任务 (Tasks)
  • 数据填充 (Seeding)
  • 环境感知配置
  • 追踪 (Tracing)、日志 (Logging),通过 tracing 无缝集成
  • 代码生成器 (Generators),通过 rrgen
  • 开箱即用的身份验证 (Authentication) (类似 Rails 的 devise)
  • 测试套件 (Testing kit),具有自动截断、fixture 数据填充、自动迁移、快照 (snapshotting) 和 редакция (redaction)

它是真正的全栈 (full stack) 框架。

为什么不选择 Rails?

如果您对 Ruby 感到满意,请使用 Rails。不要因为性能而花时间寻找其他框架 -- Rails 和 Ruby 已经足够好了。

但是如果您热爱 Rust,现在您可以像 Ruby 开发者多年来构建公司一样构建公司 -- 使用 Loco。

  • 您将获得 Rust 的安全性、强类型、出色的并发模型以及超级稳定的库和生态系统。构建一次,然后就不用管它了。
  • 部署是将 单个二进制文件 复制到服务器上。
  • 您将毫不费力地获得 每秒 100,000 个请求 的处理能力。即使加上数据库调用,也能达到每秒 5 万个请求。您永远不需要超过几台服务器。 甚至,您可以部署在树莓派 (Rasberry Pi) 上并感到满意。

单人框架 (The One Person Framework)

受到 DHH 的方法 的启发,Loco 的首要指导原则是:

单人框架

所有其他一切都源于这一单一指导原则。

例如,单人团队或单人公司:

  • 没有时间争论库、工具、lint 规则:欢迎强烈的观点。告诉我应该如何工作。
  • 需要一个驱动工具 来辅助他们的脑力 -- 这就是 Loco CLI。生成代码,操作您的项目。
  • 需要稳定性,任何崩溃都是浪费时间,任何意外都是浪费时间
  • 需要简洁性 -- 不要让我感到意外
  • 需要单一的可操作性方案。部署应该很简单。不需要 Kubernetes,不需要 IAC,不需要前提条件。
  • 需要控制。在本地编写邮件并发送,而不是在某些远程服务上。
  • 需要本地化。生产环境中发生的一切应该首先在开发环境和本地发生
  • 需要临时性。没有神圣的仪式。构建任务来向您的用户发送生日邮件,而不是发起一场关于 "管理后台 (Admin)" 项目的圣战。

Loco 是为 独立黑客 (indy hackers)、爱好者和初创公司 打造的单人框架。

凭借大约 20mb 的部署二进制文件和每秒 5 万个请求 的处理能力 - 您只需要一台小型/中型服务器、Postgres 或 Sqlite 以及互联网连接。 初创公司应该节省成本!

立即开始使用 Loco 吧!