2023 年 5 月 19 日星期五

Rails World CFP,ActiveRecord.disconnect_all!,优化的 where 查询及更多内容!

发布者:vipulnsward

大家好!

我是 Vipul,本周将带你了解 Rails 代码库中的变化。

Rails World 征稿现已开放
此征稿持续到 6 月 16 日,议程计划在两个主题上进行 26 场演讲,并且最多有六场研讨会。请阅读完整公告了解更多详情并提交你的提案!

引入 ActiveRecord.disconnect_all! 以关闭来自连接池的所有连接
此更改引入了 ActiveRecord::Base.connection.disconnect! 的多数据库感知版本。

如果我们尚未连接,它还避免连接到数据库。

这有助于在 establish_connection 已使用后,重置多数据库应用程序中的状态。

针对范围进行优化的 where 查询,其中开头和结尾相同
此修复程序优化了 where 查询,使其适用于开头和结尾值相同的范围。例如,执行 User.where(id: 2..2) 时。

# Before
SELECT `users`.* FROM `users` WHERE `users`.`id` BETWEEN 2 AND 2

# After
SELECT `users`.* FROM `users` WHERE `users`.`id`=2

很好用且有效!

确保 curl 在生成的 docker 镜像中可用
Rails 生成的应用程序的 dockerfile 模板现在默认包含 curl 包。当 docker 镜像与 MRSK 一起用于部署时,这对于运行状况检查是必需的,而MRSK 则使用 curl

将 PostgreSQL 索引中的 INCLUDE 列作为字符串返回
在 https://github.com/rails/rails/pull/44803 中引入了对 PostgreSQL 的 INCLUDE 列的支持。此更改确保包含内容返回字符串而不是符号,以便保持与 columns 返回的内容相同。

丢弃可能残留在事务中的连接
如果在 yield 提升的调用之后回滚失败,则连接会在 within_transaction 中被丢弃。这样做是为了防止在回滚实际失败的情况下连接残留在事务中。

此更改导致在以下附加的情况下丢弃连接,其中连接可能残留在事务中

  • 如果开始事务失败。
  • 如果回滚事务失败。
  • 如果提交事务失败,则回滚失败。

通过抢救上述故障并丢弃连接来实现。

允许将列大小传递给迁移生成器
此提交允许将 size 属性传递给 Rails 迁移生成器,因此在生成迁移文件后不必手动将其添加到迁移文件中。

# Before
rails generate migration CreateAuthor name:text{65535}

# After
rails generate migration CreateAuthor name:text{medium}

这生成包含大小属性的迁移

class CreateAuthor < ActiveRecord::Migration[7.1]
  def change
    create_table :authors do |t|
      t.text :name, size: :medium
    end
  end
end

内容安全政策:添加 :unsafe_hashes 映射
此更改为 unsafe_hashes 添加了对应的映射,现在允许我们在 CSP 配置中使用 :unsafe_hashes 而不是 'unsafe-hashes'

Rails.application.configure do
  config.content_security_policy do |policy|
    # ...
    policy.script_src  :self, :strict_dynamic, :unsafe_hashes,
                       "'sha256-lo7ZdP6kFds+wf1WMWvn7MhcFVFJV44kAXODRevzRZ8='" # javascript:false
    # ...
  end
  # ...
end

这允许我们正确使用内联事件处理程序,它过去会在错误键 unsafe-hashes 上失败,因为该键过去没有得到正确支持

您可以在 这里 查看完整变更列表。
过去一周有 20 位贡献者 加入到 Rails 代码库中!

下期再见!

订阅,我们将每周给您发送更新信息。