2018/02/16分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
Gemfile
の修正です。
mysql2
gemのバージョン指定を0.4.10
以上に修正しています。0.4.8と0.4.9にはMariaDBでコンパイルエラーになってしまう問題がある為との事。
参考:Release 0.4.10 · brianmario/mysql2
Merge pull request #32003 from SamSaffron/patch-2
activesupport/lib/active_support/core_ext/class/attribute.rb
の修正です。
Class#class_attribute
メソッドでStringでしていたivarをSymbolで保持するよう修正しています。
不要な複製が生成されてしまうのを避ける為。性能改善。
Merge pull request #31999 from SamSaffron/patch-1
actionpack/lib/action_dispatch/journey/scanner.rb
の修正です。
Journey::Scanner#scan
メソッドでscanした結果に対してString#-@
を使用するよう修正しています。
+ # takes advantage of String @- deduping capabilities in Ruby 2.5 upwards + # see: https://bugs.ruby-lang.org/issues/13077 + def dedup_scan(regex) + r = @ss.scan(regex) + r ? -r : nil + end def scan case @@ -47,15 +54,15 @@ def scan [:OR, "|"] when @ss.skip(/\./) [:DOT, "."] - when text = @ss.scan(/:\w+/) + when text = dedup_scan(/:\w+/)
Ruby 2.5だとString#-@
はfreezeされていないStringのdupが排除されるようになり、それによりObjectの生成を減らせるようになっている為。
PRはDiscourseのコミッターからきているのですが、Discourseだと下記の通り改善しているとの事です。
Before: Total allocated: 207574305 bytes (2214916 objects) Total retained: 36470010 bytes (322194 objects) After Total allocated: 207556847 bytes (2214711 objects) Total retained: 36327973 bytes (318627 objects) <- object that GC can not collect
が、実装にバグがあった為、直後にRevertされています。
Revert "Merge pull request #31999 from SamSaffron/patch-1"
という訳で直前の対応をrevertしています。
Revert "Revert "Merge pull request #31999 from SamSaffron/patch-1""
その後のやり取りでバグの修正のパッチがきたので、先のrevertを再度revertして、パッチが入っている状態に戻しています。
actionpack/lib/action_dispatch/journey/scanner.rb
の修正です。
Journey::Scanner#scan
メソッドでString#-@
を呼び出す箇所が間違えていたのを修正しています。
Merge pull request #31900 from eileencodes/parallel-testing
Active Supportの修正です。
テストを並列で実行する為の仕組み(Parallel Testing)をActive Supportに追加しています。
Parallel Testingははworkerを複数起動しテストを並列に実行するようになっており、workerにはプロセス、スレッドどちらかが指定出来るようになっています。また、worker毎に自動でDBを作成してくれるようになっています。
Parallel Testingを使用したい場合、parallelize
メソッドを使用する必要があります。
class ActiveSupport::TestCase parallelize(workers: 2) # デフォルトはプロセス。スレッドを使用したい場合は、`with: :threads`引数を指定する必要がある。 end
テスト結果の受け渡しにはdrbが使われるようになっています。