大家好,我是Greg,为您带来Rails代码库的最新变更。
锁定生产环境Rails应用以提高安全性
Rails生成的当前Dockerfile以非root用户运行,这可以防止修改操作系统,但仍然允许对所有gem和应用程序本身进行广泛访问。此更改锁定应用程序gem,仅对以下目录开放访问:db、log、storage、tmp。
改进对自定义命名空间的支持
此补丁改进了对自定义根命名空间的支持,并巩固了Zeitwerk在Rails中集成的方向。Pull Request中对此原因和方法有很好的解释。
在ActiveModel::MissingAttributeError错误消息中添加类名
当属性缺失时,之前的消息不清楚是哪个类缺失了该属性,尤其是在有多个类可能缺失该属性的情况下。通过在错误消息中添加类名,可以更容易地进行调试。
修复带有复合查询约束的关联的nullify操作
假设模型设置如下:
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` 关联执行nullify操作,这应该会结果导致复合查询约束的所有部分都被nullify,意味着受影响的comments中的 `blog_id` 和 `blog_post_id` 被设置为 `nil`。
使job的display_name更健壮
`display_name` 方法由延迟作业使用,以记录有关作业的信息,包括失败消息。每当移动或删除作业类时,仍然计划中的实例将无法再进行常量化,导致 `display_name` 进而导致日志方法引发异常。在某些情况下(例如,在rescue块中发生日志记录时),这可能会终止整个延迟作业工作程序。通过此更改,工作程序可以优雅地处理失败的作业并继续工作,同时提供适当的日志输出。
允许在PostgreSQL的add_index中使用include和where
最近,为在PostgreSQL中创建索引时使用 `include` 选项添加了支持,但是,当此选项与 `where` 选项结合使用时,INCLUDE和WHERE段的顺序不正确,导致迁移出错。此Pull Request更改了添加索引时INCLUDE和WHERE段的顺序,以便查询有效。它还更新了在转储架构时,在create index语句中期望它们的顺序。
将rails路由搜索扩展到所有表内容
此Pull Request将rails/info/routes页面的搜索字段扩展到还可以搜索:
在此更改之前,搜索字段仅限于路由路径。
增强has_secure_password,使其还能生成password_salt方法
通过此更改,`has_secure_password` 会生成一个 `#{attribute}_salt` 方法,该方法返回用于计算密码摘要的salt。每次更改密码时,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设为railtie的依赖项
此Pull Request将irb添加为railtie的依赖项,以便使用旧版Ruby的用户可以受益于最新版本的irb,而不是仅限于其Ruby安装中捆绑的版本。
实现Object#with
此Pull Request添加了 `Object#with`,用于在块周围设置和恢复公共属性。
client.timeout # => 5
client.with(timeout: 1) do
client.timeout # => 1
end
client.timeout # => 5
有关此更改的更多示例和详细信息,请参阅Pull Request。
您可以在此处查看所有变更列表。 上周,我们有30位贡献者为Rails代码库做出了贡献!
下次再见!
订阅以通过邮件获取这些更新。