Rails 8的第一个测试版已正式发布,带来了令人兴奋的一系列新功能、漏洞修复和改进。此版本基于Rails 7.2构建,同时引入了新功能和优化,使Rails开发更加高效和愉快。
关键亮点包括与 Kamal 2 的集成,实现轻松部署,引入 Propshaft 作为新的默认资产管道系统,以及对 ActiveRecord 的大量增强。Rails 8 还带来了多项 SQLite 集成改进,使其成为生产环境中的可行选择。
让我们一起来看看Rails 8的全部功能,一起加油!
使用 Kamal 2 和 Thruster 实现轻松部署Rails 8 让你用 Kamal 2 和 Thruster 更轻松地部署应用。
Kamal 2(一个部署工具网站)减少了对托管云服务和PaaS平台的依赖,只需几分钟即可快速轻松地部署到云虚拟机、裸机服务器或VPS。
只需一条命令 (kamal setup
),你就可以在标准的 Linux 系统上设置一个生产就绪的 Rails 环境,从而使部署既简单又经济。
Kamal 2 还可以与 Thruster 集成。Thruster 是一个专为 Rails 构建的自定义代理,支持不停机更新、HTTP/2 支持、自动使用 Let's Encrypt 的 SSL 证书、启用 Gzip 压缩,并支持在单个服务器上轻松托管多个应用——所有这些功能都不需要复杂的配置。
有了 Kamal 2 和 Thruster,Rails 8 让部署应用程序变得前所未有的简单。如果你喜欢其他部署方式,你可以通过添加 --skip-kamal
选项来继续使用你现有的工作流程。
Rails 8的一个重要改进是通过减少所需的额外服务,从而实现更简单的部署,以满足常见的 web 应用需求。
传统上,如果你需要任务队列、缓存和消息发布与订阅等功能,你会使用例如 PostgreSQL 这样的数据库并结合 Redis 来提供这些功能。
在 Rails 8 中,你可以借助三个新的数据库支持的适配器:Solid Cable、Solid Cache 和 Solid Queue,仅用 SQLite 就能处理所有这些,这都要归功于这三个适配器。
-
Solid Cable 是 Rails 生产环境下的新默认 Action Cable 适配器,这意味着你可以不再依赖 Redis。它充当发布/订阅服务器,通过快速轮询,使用 SQLite 在应用和客户端之间传递消息。虽然使用轮询,Solid Cable 的性能在大多数情况下仍能与 Redis 相匹敌。
-
硬盘缓存通过使用磁盘存储替代RAM进行缓存,从而取代Redis。这种做法允许使用更大、更经济的缓存,这些缓存可以保存更长时间并处理更多请求,同时不会影响性能。它还支持加密存储,并符合隐私保留政策的要求。
- Solid Queue 替换了 Redis,用于 Active Job 的后台处理任务,采用了
FOR UPDATE SKIP LOCKED
机制来高效处理任务(兼容 PostgreSQL、MySQL 和 SQLite)。它包含了如并发控制、重试和周期任务等关键功能,并已在 HEY 上证明了其实力,现在每天处理 2000 万项任务。
这三个适配器是围绕一个简单想法设计的:现代SSD和NVMe硬盘已经足够快,可以处理以前只能用内存解决方案完成的任务。利用这些快速的硬盘,Rails不再需要像Redis这样的内存工具。
SQLite 已准备好用于生产Rails 8 将 SQLite 从一个轻量级开发工具提升为生产环境中的可靠选择,这要归功于对 SQLite 驱动程序和 Ruby 驱动程序的大量改进。
现在,由于这些固态适配器(如上所述)的应用,SQLite 不仅能够很好地支持 Action Cable、Rails.cache 和 Active Job,其作用不再仅仅局限于原型设计或测试环境。
以下是Rails 8中SQLite的集成的一些重要改进:
- 现在支持使用
create_virtual_table
进行全文搜索以及虚拟表的支持。 - 适配器现在允许批量插入 fixture,以增强数据种子加载的性能。
- 事务默认采用
IMMEDIATE
模式来提高并发性。 - 通过将
SQLite3::BusyException
转换为ActiveRecord::StatementTimeout
来增强错误处理能力。
Rails 8 还引入了 Propshaft 作为新的默认资产管道,取代了已使用多年的 Sprockets 系统。Sprockets 为 Rails 开发者提供了多年的良好支持,但它是在一个不同的时代设计的——在 JavaScript 构建工具大行其道和现代浏览器改进之前的时代。
Propshaft 代表了一种更简单、现代的资产管理方式,围绕当今开发者的实际需求。它的目标非常明确:为资产提供清晰的管理路径,并使用缓存指纹来优化缓存。
与承担了许多额外任务的 Sprockets 不同,Propshaft 只关注核心内容,符合新版本 Rails 的简洁哲学,即保持资产管道精简(而将复杂的 JavaScript 处理留给像 Esbuild 或 Vite 这样的专业工具)。
内置认证简单易用多年来,Rails一直在开发认证的关键组件,从Rails 5中的has_secure_password
到Rails 7.1中的normalizes
、generates_token_for
和authenticate_by
。更多详情请参阅Rails 7.1。
在 Rails 8 中,所有这些组件结合在一起,为你提供了一个构建一个安全的会话认证系统的简洁的起点。
只需运行一个命令,你就可以设置一个包含基于数据库的会话和密码重置功能的身份验证系统。
bin/rails 生成认证模块
点击此处进入或退出全屏模式
此命令会生成关键文件,比如模型、控制器、邮件处理和视图等。
以下是一些文件路径示例:
app/models/current.rb
app/models/user.rb
用户模型文件
app/models/session.rb
会话模型文件
app/controllers/sessions_controller.rb
会话控制器文件
app/controllers/passwords_controller.rb
密码控制器文件
app/mailers/passwords_mailer.rb
密码邮件发送器文件
app/views/sessions/new.html.erb
会话视图文件
app/views/passwords/new.html.erb
新密码视图文件
app/views/passwords/edit.html.erb
编辑密码视图文件
app/views/passwords_mailer/reset.html.erb
密码重置邮件视图文件
app/views/passwords_mailer/reset.text.erb
密码重置邮件文本视图文件
db/migrate/xxxxxxx_create_users.rb
用户迁移文件
db/migrate/xxxxxxx_create_sessions.rb
会话迁移文件
test/mailers/previews/passwords_mailer_preview.rb
密码邮件预览文件
全屏 退出全屏
这有效地将你置于快速通道上,以实现安全且准备就绪的认证。最后一步是集成一个根据你应用需求定制的用户注册过程。这样就完成了所有步骤。
新建脚本文件夹和生成器:Rails 8 引入了一个新的 script
文件夹,专门用于存放一次性脚本或通用脚本,如数据迁移脚本、清理任务脚本或其它实用脚本。这个新功能帮助有条理地组织这些脚本,使它们与应用程序的主要逻辑分开。
为了更简单地创建脚本,现在可以使用一个脚本工具。只需一个简单的命令,你就可以生成脚本。
bin/rails generate script my_script
这将生成一个名为my_script的脚本文件。
全屏显示,退出全屏
这些命令创建相应的脚本文件,你可以通过运行它们。
请在终端输入以下命令来运行脚本:bundle exec ruby script/my_script.rb
进入全屏模式,退出全屏模式
这种简洁的方法让你的应用保持井井有条,并使处理自定义脚本更加方便且易于维护。
一系列的 ActiveRecord 改进在 Rails 8 中,Active Record 也进行了重大改进,包括提高性能、简化迁移过程、简化故障排查,以及更好地支持复杂的数据库场景。
以下是此次最新版本的一些关键改动:
- Rails 8 现在区分了 PostgreSQL 中的
float4
和float8
类型。 drop_table
现在支持一次删除多个表。- 增加了对 PostgreSQL 表继承和原生分区的支持。
- 现在支持批量插入 fixtures,以提高数据初始化性能。
- 现在在迁移新数据库时,会先加载数据库模式,然后再运行迁移。
create_schema
和drop_schema
操作现在可以被撤销或恢复。- Rails 8 现在要求使用 MySQL 5.6.4 或更高版本,由于引入了如带微秒精度的 datetime 等改进。
- 开发环境中,默认启用了查询日志标签,以帮助追踪 SQL 语句回溯到应用程序代码,并识别正在使用的数据库。
Rails 8 带来了一系列重要的新功能和改进,从使用 Kamal 实现更简单的部署,以及现代化的资产管道,到 ActiveRecord 的重大改进和 SQLite 在生产环境下的表现提升。
这些进步不仅提高了开发人员的生产力,还符合现代最佳实践标准,让你可以专注于构建应用程序,而不是纠结于基础设施的复杂性。
要查阅Rails 8所有新功能、优化和其他变更,请查阅Rails 8官方发行说明。
如果你想为 Rails 做贡献,可以访问 [Rails 的 GitHub 仓库] 看看有哪些开放的问题,并查阅贡献指南。
感谢你的阅读!
另外,如果您想第一时间读到 Ruby Magic 的文章,请订阅我们的 Ruby Magic 时事通讯,一发布就不会错过任何一篇。