なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2018/09/13)

2018/09/13分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

actionmailer/CHANGELOG.md

activejob/CHANGELOG.md


Merge pull request #33832 from bogdanvlviv/follow-up-33756

Active Recordの修正です。

ActiveRecord::Base::filter_attributesを追加した、Merge pull request #33756 from piecehealth/prのfollow up対応として、各docの修正、共通処理のメソッドの切り出し、等を行っています。


Merge pull request #33854 from rigani/integer-multiple

activesupport/lib/active_support/core_ext/integer/multiple.rbの修正です。

Integer#multiple_of?メソッドで値のチェックに!=、及び、zero?を使用していたのを、どちらも==を使用するよう修正しています。==の方が高速な為。


Include test helpers when ActionDispatch::IntegrationTest is loaded

actionmailer/lib/action_mailer/railtie.rbactivejob/lib/active_job/railtie.rbの修正です。

ActionDispatch::IntegrationTestがデフォルトでActionMailer::TestHelperActiveJob::TestHelperをincludeするよう修正しています。

ActionDispatch::IntegrationTestはcontrollerが呼び出すすべての処理のテストを出来るようにする事を想定しており、mailやjob queueに対するassertもその一部なので、デフォルトでそれらに対するassertionが出来るようにする為にincludeするようになりました。詳細は説明はissue参照。


Add a test that exercice better the behavior we expect in the query cache

railties/test/application/loading_test.rbの修正です。

development env(eager loadがtrueになっていないenv)でも最初のrequestの実行前にquery cacheがloadされる事を確認するテストを追加しています。


Merge pull request #33860 from jhawthorn/faster_find_templates

actionview/lib/action_view/template/resolver.rbの修正です。

ActionView::PathResolverでtemplateを検索するのに、ワイルドカードを使用するよう修正しています。

元々は、templateを取得するのに下記のようなコードが使用されていました。

Dir["app/views/users/show{.en,}{.html,.text,.js,.css,.ics,.csv,.vcf,.vtt,.png,.jpeg,.gif,.bmp,.tiff,.svg,.mpeg,.mp3,.ogg,.m4a,.webm,.mp4,.otf,.ttf,.woff,.woff2,.xml,.rss,.atom,.yaml,.multipart_form,.url_encoded_form,.json,.pdf,.zip,.gzip,}{}{.raw,.erb,.html,.builder,.ruby,}"]

これだとそれぞれのパターン(app/views/users/show.en.html.rawapp/views/users/show.en.html.erb等々)毎にファイルが存在するかのチェック処理が実行されてしまい、結果大量のsyscallsが実行されてしまっていました。

で、これを、下記のようにワイルドカードを使用するよう修正しています

Dir["app/views/users/show*"]

これによりsyscallの呼び出しが大量に軽減(PRにあるコメントだと、元が1682 syscallsだったのが、14 syscallsに軽減)し、高速にtemplateの検索が行われるようになっています。


Merge pull request #33844 from kamipo/too_many_eager_load_ids

activerecord/lib/active_record/relation/predicate_builder.rbactiverecord/lib/active_record/relation/predicate_builder/array_handler.rbの修正です。

大量のレコードを一度にロードしようとした際にActiveRecord::StatementInvalidのエラーになってしまうバグがあったのを修正しています。

Refactor Active Record to let Arel manage bind paramsでIN clauseでbind paramsが使われるようになったのですが、bind paramsの数には制限(mysql2 65535, pg 65535, sqlite3 250000)があり、それら以上の数のレコードをロードしようとすると、bind paramsの制限にひっかかりqueryの実行でエラーになるようになってしまいました。

それを避ける為、Arrayについてはbind paramsを使用しないよう修正しています。


Add changelog entries for #33849 [ci skip]

actionmailer/CHANGELOG.mdactivejob/CHANGELOG.mdの修正です。

ActionDispatch::IntegrationTestがデフォルトでActionMailer::TestHelperActiveJob::TestHelperをincludeするよう修正した対応のエントリーを追加しています。