1. What's New in Ruby on Rails 8 (blog.appsignal.com)
Ruby on Rails 8 主要更新摘要
Rails 8 的首个测试版已发布,它在 Rails 7.2 的基础上引入了一系列新特性、错误修复和改进,旨在提升开发效率和体验。
核心亮点
1. 简化部署:Kamal 2 与 Thruster
- Kamal 2 允许开发者在几分钟内将应用部署到云虚拟机、物理服务器或 VPS 环境,减少了对托管云服务和 PaaS 的依赖。仅需
kamal setup一个命令即可完成生产环境配置。 - 它与专为 Rails 构建的代理 Thruster 集成,支持零停机部署、HTTP/2、自动 SSL 证书、Gzip 压缩及单服务器托管多应用。
- 开发者可通过
--skip-kamal选项跳过 Kamal,保持原有部署流程。
2. 轻量化部署与 Solid 适配器
Rails 8 通过三个新的数据库后端适配器,显著减少了对额外服务(如 Redis)的依赖,仅用 SQLite 即可处理常见的 Web 应用需求。
- Solid Cable:取代 Redis 成为新的默认 Action Cable 生产适配器,通过 SQLite 实现发布/订阅功能。
- Solid Cache:利用磁盘存储替代内存缓存,支持更大、更持久且更经济的缓存方案,并具备加密和数据保留策略。
- Solid Queue:取代 Redis 用于 Active Job 后台任务处理,通过
FOR UPDATE SKIP LOCKED机制高效管理任务,包含并发控制、重试和定时任务等功能。
这些适配器的设计理念是利用现代高速 SSD/NVMe 硬盘的性能,从而不再强制要求内存数据库。
3. SQLite 正式可用于生产环境
得益于对 SQLite 适配器和 Ruby 驱动程序的大量改进,SQLite 现在可以可靠地用于生产环境。
- 支持全文搜索和虚拟表。
- 支持批量插入 fixtures 以提升数据填充性能。
- 事务默认为
IMMEDIATE模式以提高并发性。 - 改进了错误处理,将
SQLite3::BusyException转换为ActiveRecord::StatementTimeout。
4. 新的资产管道:Propshaft
Propshaft 取代了长期使用的 Sprockets,成为新的默认资产管道。它采用更简洁的现代设计,专注于提供清晰的资产路径和缓存摘要戳。复杂的 JavaScript 处理则交由 Esbuild 或 Vite 等专业工具完成。
5. 内置认证系统
Rails 8 整合了多年来积累的认证组件(如 has_secure_password、generates_token_for 等),提供了一个简单的起点。通过运行一个命令,即可生成基于数据库会话和密码重置功能的认证系统所需模型、控制器、邮件和视图文件。
6. 新的脚本目录与生成器
引入了新的 script 目录用于存放一次性或通用脚本(如数据迁移、清理任务)。并提供了脚本生成器,方便创建和执行这些脚本,使项目结构更清晰。
7. ActiveRecord 的多项改进
- 在 PostgreSQL 中区分
float4和float8。 drop_table支持一次删除多张表。- 在 PostgreSQL 中创建表时支持继承和分区等高级选项。
- 支持批量插入 fixtures。
- 新数据库迁移前会先加载数据库模式(schema)。
create_schema和drop_schema操作变为可逆。- 因支持
datetime精度等特性,要求 MySQL 5.6.4 或更高版本。 - 在开发环境中默认启用查询日志标签,便于将 SQL 语句追溯到应用代码。