2021 年 12 月 31 日,星期五

今年的 Rails!2021 年 Rails 世界的总结

发布者 debug

嗨,大家好,我是 Greg,我来给大家总结一下 2021 年 Rails 世界中发生的事情。
发生了很多变化,很难决定提到哪一个,但我尽我最大的努力找到了一些值得注意的变化

查找并验证只有一条记录的存在
添加 FinderMethods#sole 和 #find_sole_by 来查找并验证只有一条记录的存在。 基于这一点,Enumerable#sole 返回枚举的唯一项。如果没有项目或项目多于一个,它将引发异常。

添加 ActionController::Live#send_stream
添加将二进制数据实时流式传输到浏览器的功能,比如 send_data 对静态文件所做的那样。

添加类似于 Model.update 但会引发异常的 Model.update!
你可能熟悉实例方法 Model#update!但现在你可以在类中进行此操作!

Active Record destroy_all 批量执行
默认情况下,它将以 100 的批次加载记录,并允许指定自定义批次大小。

添加为 Action Mailbox 配置 Active Storage 的可能性
现在可以使用 config.action_mailbox.storage_service 为电子邮件原始来源存储配置 Active Storage 服务。

针对不允许的打开重定向引发错误
向 redirect_to 添加 allow_other_host 选项。可以使用 ActionController::Base.raise_on_open_redirects = true 选择此行为。

更新 Capybara 驱动程序
弃用 poltergeist 和 webkit(capybara-webkit)驱动程序进行系统测试的注册(它们将在 Rails 7.1 中被删除),并添加 cuprite 代替它们。

当出现 ActiveRecord::NoDatabaseError 时,通过 UI 创建数据库
这个 PR 添加了在开发模式下尚未创建数据库时通过 UI 创建数据库的可能性。

添加 ActiveRecord::QueryMethods#in_order_of
#in_order_of 允许你根据 SQL 表达式指定希望返回记录的明确顺序,例如:Post.in_order_of(:id, [3, 5, 1])

在 Active Storage 中支持字节范围
此 PR 允许分块提供上传内容,以便按需流式传输缓冲文件,例如从 S3 到 iPhone 的音频播客。

用 ruby/debug 替换 Byebug
Ruby 3.1 将推出一个新的头等debugger,该 debugger 与 Rails 运行良好。  
让我们都感谢 Byebug 多年来帮助我们发布软件。

在 "bin/rails dbconsole" 中为 postgresql 添加 SSL 支持
这个 PR 修复了与 PostgreSQL 一起使用 dbconsole 命令时的问题,以支持加密连接。

推出 ActiveModel::API
使 ActiveModel::API 成为与 Action Pack 和 Action View 通信所需的最低级 API。这将允许向 ActiveModel::Model 添加更多功能。

GitHub Codespaces 配置
此 PR 增加对 GitHub Codespaces 的支持,允许贡献者轻松启动一个全功能环境,以创建补丁并测试 Rails 中的更改。

标准化错误报告界面
Rails.error 是一个新的错误报告界面,带有两个基于块的方法。handle,它捕捉错误并将其转发给订阅者
   Rails.error.handle do 1 + ‘1’ # 引发 TypeError 结尾 1 + 1 # 将执行此操作

record,它将错误转发给订阅者,但允许它继续回溯调用堆栈
    Rails.error.record do 1 + ‘1’ # 引发 TypeError 结尾 1 + 1 # 不执行此操作。

对于不适合基于阻止的 API 的情况,可以使用低级别 report 方法

    Rails.error.report(error, handled: true / false)

529 个令人惊叹的人 在今年贡献了 3716 个提交给 Rails!最近发布了一个 Rails 的新主要版本,其中包括诸如使用 ActiveRecord 的工作加密、异步查询加载、更好的 Zeitwerk 代码加载器 CSS 和 Javascript 捆绑等功能,而且 Rails 还获得了新的网站和启动屏幕!
感谢所有人,明年见!