2015 年 12 月 11 日,星期五

本周 Rails 更新:GZipped Asset、API 错误响应及更多精彩!

发布者:vipulnsward

大家好!🌨

我是 Vipul,为您带来 Rails 的最新资讯。

P.S:以下内容献给所有参加 RubyKaigi 的朋友们 🍣。希望你们喜欢!

本周 Rails 贡献者

本周,Rails 共有 26 名优秀的贡献者,其中包括 6 名首次贡献者!如果您也愿意参与,请查看 问题列表

Sprockets:重新引入 gzip 文件生成

去年 sprockets 中删除了 gzip 文件生成功能。此更改重新引入了压缩文件生成和并行文件写入,这对不支持对静态资产进行 GZIP 压缩的 Web 服务器很有用。如果您使用 Heroku 等服务,这会非常有用。

新功能

引入 after_{create,update,delete}_commit 回调

after_commit .. on: :action 添加了新的快捷方式。

例如,after_commit :add_to_index_later, on: :create 现在可以写成 after_create_commit :add_to_index_later

改进

Rails API:在开发模式下以 json 格式返回错误响应的能力

之前,在开发模式下,错误页面总是以 html 页面形式呈现,这在希望查看 json 响应时很不方便。此更改添加了以 json 格式查看错误的支持。它还能确保在请求诸如 post/1.json 之类的资源时,如果发生错误,它会根据 url 中的 json 格式返回 json 响应,而不是以前使用的 html 格式。

protect_from_forgery 预置默认值更改为 false

现在 protect_from_forgery 将在应用程序中调用它的位置插入到回调链中。这对于在执行必需的认证回调或防范攻击后需要运行的其他回调后 protect_from_forgery 的情况下很有用。

如果需要,可以使用 protect_from_forgery prepend: true 来始终在其他内容之前运行 protect_from_forgery

从 Rails API 中删除 request_forgery_protection 初始化程序

通常情况下,在 Rails API 中,您不会使用 protect_from_forgery。如果您正在创建 API,则添加该选项的初始化程序 - request_forgery_protection,现在已被删除。

修复

在工具内部分订阅通知。

如果我们尝试执行以下操作

ActiveSupport::Notifications.instrument('foo') do
  ActiveSupport::Notifications.subscribe('foo') {}
end

将会报错,因为在 subscribe 块内,动态 subscription 还不存在。此更改确保 instrumentation 内部的订阅也会得到通知。

如果响应是 :redirect,添加 assert_response 错误消息中的重定向路径

如果 assert_response 以前检查任何非重定向响应,如 :success,而实际响应是 :redirect,则显示的错误消息如下 - 预期响应为 <success>。该更改目前在错误响应中显示重定向路径,如下 - 预期响应为 <success>,但实际重定向至 <http://test.host/posts/lol>

收尾

本周的 Rails 内容就介绍到这里。一如既往,还有很多更改我们这里没有空间一一介绍,但欢迎你 自行了解

下期再会!