Ruby on Rails 8.0 发布,引入 Kamal 2 以改进部署

Ruby on Rails 8 发布:简化部署、提升性能与减少依赖

Ruby on Rails 最近发布了第 8 版本,带来了旨在简化部署、提升性能和减少依赖的更新。Ruby on Rails 的创始人、37signals 的联合创始人兼 CTO David Heinemeier Hansson 在博客中宣布了这些重大改进。

Kamal 2:简化部署工具

Rails 8 引入了 Kamal 2,这是一个部署工具,允许开发者更轻松地将应用部署到云虚拟机或本地服务器。只需运行一个 kamal setup 命令,开发者就能快速配置生产环境的服务器。该工具使用 Dockerfile 生成生产就绪的容器镜像,消除了对 Nginx 等额外 Web 服务器的需求。

Thruster 和 Kamal Proxy

Dockerfile 中包含了 Thruster,这是一个新的代理,用于加速 X-Sendfile、资产缓存和压缩,使得 Rails 容器开箱即用。Kamal 2 还引入了 Kamal Proxy,取代 Traefik 作为默认代理,支持零停机部署、通过 Let’s Encrypt 自动获取 SSL 证书,以及在同一服务器上托管多个应用,且无需复杂配置。此外,Kamal 2 还集成了 1Password 和 Bitwarden 等密码管理器,用于安全的密钥管理,并提供了远程命令执行的别名功能。

SQLite 适配器:简化附属服务

Rails 8 引入了三个基于 SQLite 的适配器,简化了部署所需的附属服务:

  • Solid Cable:替换 Redis 用于 WebSocket 消息中继,提供数据库内消息存储,便于高效调试。
  • Solid Cache:利用磁盘存储提供经济高效的缓存解决方案,支持更大的数据集和加密、保留策略等高级功能。
  • Solid Queue:将任务队列直接集成到 SQLite 或其他数据库中,消除了对 Sidekiq 等任务运行框架的依赖,支持并发控制、失败重试和任务调度等强大功能。

Propshaft:新的资产管道

Rails 8 引入了 Propshaft 作为新的默认资产管道,取代了旧的 Sprockets 系统。Propshaft 遵循 Rails 的 #NOBUILD 理念,简化资产管理为两个核心功能:提供资产加载路径和为资产添加摘要以实现缓存友好型过期。这一方法引入了现代 Web 开发实践,同时保持了对现有应用的 Sprockets 兼容性。

社区反响热烈

Rails 8 的发布在技术社区引发了热烈讨论。Hansson 在 LinkedIn 上的发布获得了 1,308 次互动,社区称赞 Rails 8 为“改变游戏规则”的版本,并对其不再依赖定制化托管表示赞赏。Hacker News 用户 faizshah 推荐观看 Hansson 在 Rails World 上关于 Rails 8 的演讲,指出 Rails 8 试图摆脱行业趋势,拒绝一些流行做法(如害怕接触 Linux 服务器或实现自己的身份验证)。

身份验证生成器

Rails 8 将身份验证工具整合到一个生成器中,开发者可以通过运行 bin/rails generate authentication 快速设置完整的基于会话的系统,包括密码重置功能。该功能生成必要的模型(如 UserSession)、控制器(如 SessionsController)和邮件(如 PasswordsMailer),简化了安全身份验证的实现,无需依赖第三方解决方案。

移除过时功能

Rails 8 移除了其组件中已过时的功能,如 config.read_encrypted_secrets 配置和 Active Record 中对未注册数据库适配器的支持。此外,Action View 中将 nil 传递给 form_with 的行为也被移除。

安全性增强

Rails 8 通过设置正则表达式的默认超时 Regexp.timeout 来缓解拒绝服务攻击的风险。

详细变更

感兴趣的读者可以查看 Rails 8 变更日志 以了解详细变更。

阅读 17
0 条评论