2015年12月11日,星期五

本周 Rails:GZipped Asset,API 错误响应等!

由 vipulnsward 发布

大家好! 🌨

我是Vipul,为您带来Rails的最新消息。

附注:为所有参加RubyKaigi的朋友们准备了点东西 🍣。祝您玩得开心!

本周 Rails 贡献者

本周有26位杰出的贡献者参与了Rails的开发,其中包括6位首次贡献者!如果您也想帮忙,可以查看问题列表

Sprockets:重新引入gzip文件生成

GZip文件生成功能在去年从sprockets中移除。此次更改重新引入了压缩文件生成和并行文件写入功能,这对于不支持静态资源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 的prepend默认值更改为 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 已被移除。

修复

在instrumented部分内订阅通知

以前,如果我们尝试这样做

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

会产生一个错误,因为对于代码块中的 subscribe,动态的 subscription 尚不存在。此更改确保了 instrumentation 内部的订阅也能得到通知。

在 assert_response 的错误消息中添加重定向路径(当response为 :redirect 时)

以前,如果 assert_response 检查的是非重定向响应(例如 :success),而实际响应是 :redirect,则显示的错误消息为 - Expected response to be a <success>。此次更改后,错误响应将显示重定向路径,例如 - Expected response to be a <success>, but was a redirect to <http://test.host/posts/lol>

总结

以上就是本周Rails的更新内容。一如既往,实际的更改比这里介绍的要多得多,但您可以随时 自行查看

下次再见!