嗨,大家好,我是 Greg,为您带来 Rails 代码库中的最新变更。
锁定生产环境中的 Rails 应用程序以确保安全
Rails 生成的当前 Dockerfile 以非 root 用户身份运行,这可以防止对操作系统进行修改,但会对所有 gem 和应用程序本身开放。此变更锁定应用程序 gem,仅开放对以下目录的访问权限:db、log、storage、tmp。
改进对自定义命名空间的支持
此修补程序改进了对自定义根命名空间的支持,并巩固了在 Rails 中集成 Zeitwerk 时设计中的一个方向。在 pull 请求中对原因和方法进行了很好的解释。
将类名称添加到 ActiveModel::MissingAttributeError 错误消息中
当一个属性缺失时,之前的消息并未明确说明是哪个类缺失该属性,尤其是在有多个类可能会缺失该属性的情况下。通过将类名称添加到错误消息中,可以更轻松地进行调试。
修复在使用复合查询约束时将关联置为无效
给定类似这样的模型设置
class BlogPost < ApplicationRecord
query_constraints :blog_id, :id
has_many :comments, query_constraints: [:blog_id, :blog_post_id]
end
class Comment < ApplicationRecord
query_constraints :blog_id, :blog_post_id
belongs_to :blog_post, query_constraints: [:blog_id, :blog_post_id]
end
通过此变更,现在可以将 blog_post.comments = []
和 comment.blog_post = nil
关联置为无效,这应导致复合查询约束的所有部分均变为无效,这意味着受影响的注释上的 blog_id
和 blog_post_id
为 nil
。
使作业的 display_name 达到故障保护
延迟作业使用 display_name
方法来记录有关作业的信息,包括故障消息。每当作业类被移动或删除时,仍计划的实例将不能再被常量化,导致 display_name
及其日志方法引发异常。在某些情况下(例如在救援块中发生日志记录时),可能会终止整个延迟作业工作程序。通过此变更,该工作程序能够轻松处理故障作业并继续工作,同时输出适当的日志。
在 PostgreSQL add_index 中同时允许 include 和 where
近期,PostgreSQL 中创建索引时添加了对 include
选项的支持,但当与 where
选项联合使用此选项时,INCLUDE 和 WHERE 片段顺序错误,导致迁移出错。此请求更改了添加索引时的 INCLUDE 和 WHERE 片段的顺序,以使查询有效。在转储架构时,它还更新了在创建索引语句中预期的顺序。
将 Rails 路由搜索扩展到所有表内容
此请求将 Rails/info/routes 页面上的搜索字段扩展到还可以搜索
在此更改之前,搜索字段仅限于路由路径。
增强 has_secure_password 以便也能生成 password_salt 方法
通过此更改,has_secure_password
会生成一个 #{attribute}_salt
方法,用于返回计算密码摘要时所用的盐。每次更改密码时,盐都会更改,因此可用于使用 generates_token_for
创建一次性密码重置令牌
class User < ActiveRecord::Base
has_secure_password
generates_token_for :password_reset, expires_in: 15.minutes do
password_salt&.last(10)
end
end
使 irb 成为 railties 依赖项
此请求将 irb 添加到 railties 的依赖项中,因此使用旧版 Ruby 的用户可以受益于最新版的 irb,而无需局限于随 Ruby 安装附带的版本。
实现 Object#with
此请求添加 Object#with
以设置和恢复一个块周围的公共属性
client.timeout # => 5
client.with(timeout: 1) do
client.timeout # => 1
end
client.timeout # => 5
有关此更改的更多示例和详细信息,请参见此请求。
您可以在此处查看所有更改列表 此处。 过去一周,有 30 位贡献者为 Rails 代码库做出贡献!
下期再见!
订阅以通过邮件收到这些更新。