2023年5月19日,星期五

Rails World CFP、ActiveRecord.disconnect_all!、优化的 where 查询以及更多!

由 vipulnsward 发布

大家好!

我是Vipul,为您带来本周Rails代码库的变更。

Rails World 论文征集现已开放
本次CFP(征文启事)开放至6月16日,议程将包含两个会场共26个演讲,以及最多六个研讨会。请阅读完整的公告以获取更多详情并提交您的提案!

引入 ActiveRecord.disconnect_all! 以关闭连接池中的所有连接
此更改引入了一个支持多数据库的 ActiveRecord::Base.connection.disconnect! 版本。

如果我们尚未连接,此方法还会避免连接到数据库。

在 establish_connection 使用后,这对于重置多数据库应用程序的状态可能很有用。

优化了首尾相同的范围查询
此修复优化了首尾值相同的范围查询。例如,在执行 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

简洁而有效!

确保生成的docker镜像中包含curl
Rails 生成的应用程序的 dockerfile 模板现在默认包含 curl 包。这对于使用 MRSK(一个使用 curl 的工具)部署 Docker 镜像时的健康检查是必需的。

将PostgreSQL索引中的INCLUDE列作为字符串返回
PostgreSQL 的 INCLUDE 列支持已在 https://github.com/rails/rails/pull/44803 中引入。此更改确保 include 返回字符串而不是符号,以保持与 columns 返回的行为一致。

丢弃可能仍处于事务中的连接
在 yield 调用引发错误后回滚失败时,连接会在 within_transaction 中被丢弃。这样做是为了防止在回滚实际失败时连接仍处于事务中。

此更改导致在连接可能仍处于事务中的以下额外情况下丢弃连接:

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

通过捕获上述失败并丢弃连接。

启用向迁移生成器传递列大小
此提交允许将 size 属性传递给 Rails 迁移生成器,这样在生成迁移文件后就不需要手动添加它了。

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

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

这将生成一个包含 size 属性的迁移

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 键而出现的错误会阻止其正常工作。

您可以在此处查看所有更改的完整列表:https://github.com/rails/rails/compare/@%7B2023-05-05%7D...main@%7B2023-05-12%7D。
上周我们有20位贡献者参与了 Rails 代码库的开发!https://contributors.rubyonrails.org/contributors/in-time-window/20230512-20230519

下次再见!

订阅以通过邮件获取这些更新。