2016年12月10日,星期六

本周Rails:yarn、webpack、BIGINT PKs 等!

由 chancancode 发布

大家好,我是来自俄勒冈州波特兰的 Godfrey。本周对我来说喜忧参半——一方面,波特兰因为风暴经历了一周糟糕的天气;另一方面,Rails 迎来了一系列令人兴奋的变动。这样算扯平了吗?我想我们会逐一了解这些变动,然后由你们自己来判断!

“Yarn 很好。Yarn 能用。”

上周,我们提到 Rails 5.1 将新增一个 –yarn 选项。现在,这个选项被提升为默认设置:每个新的 Rails 应用都将默认配置为使用 yarn。另外值得注意的是,yarn 包现在将安装到 vendor/node_modules 目录中

基本的 webpack 集成

说到 JavaScript,资源打包方面也得到了一些关注。Rails 5.1 将通过 –webpack 选项获得对 webpack 的一等支持。这仍然是一个非常早期的尝试,所以一定要试用并帮助改进它

将主键默认更改为 BIGINT

朋友不会让朋友使用 INT 作为主键——你的应用可能在你意识到之前就达到了 WebScale™,当你的主键列溢出时会带来很多麻烦。为了帮助你走上正确的道路,Rails 5.1 将默认在 MySQL 和 PostgreSQL 中为主键列使用 BIGINT。

新增

引入 ActiveRecord::NotNullViolation 错误

根据此拉取请求,如果你的模型因 NOT NULL 约束而未能保存,Rails 将会抛出一个 NotNullViolation 错误(而不是一个通用的 StatementInvalid 错误),这样你就可以捕获该错误并适当地处理它。

改进

将 RSpec 集成测试速度提高 40%

此补丁修复了一个在集成测试之间不必要地重新编译模板的问题,从而显著提高了速度。

修复

幂等的 after_commit 回调

以前,某些竞态条件可能导致你的 after_commit 回调触发的次数比预期要多。此补丁试图更准确地跟踪数据库中实际发生的工作,以确保你的钩子仅在适当的时候被触发。

允许在模板中使用名为 block 的变量

你尝试在模板中使用名为 block 的变量了吗?如果试过,你可能会看到 Rails 产生一个非常奇怪的错误。现在不会了!通过此补丁,你可以毫无问题地执行此操作。

subclassesdescendants 中排除单例类

Ruby 2.3.0 的一项更改意外地改变了 Active Support 的 Class#subclassesClass#descendants 方法的行为,使其包含单例类。此补丁恢复了之前的行为,并(再次)使不同版本的 Ruby 保持一致。

总结

本周 Rails 内容就这些!还有许多其他优秀的贡献,所以请随意自行查看

下周再见!