なるようになるブログ

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

rails commit log流し読み(2019/03/16)

2019/03/16分のコミットです。

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

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md


Rename ActionView::Base#run to #_run

Action Viewの修正です。

ActionView::Base#runActionView::Base#_runにリネームしています。アプリ側でviewにrunという名前のメソッドを定義しているケースがあるらしく、メソッド名が被ってしまうのを避ける為、_ prefixを指定するようにしています。


Merge pull request #35623 from jhawthorn/actionview_cache

Action Viewの修正です。

Template::Resolverでファイルの更新日時元にキャッシュ可能かどうかチェックし、更新されていた場合のみキャッシュするようにしていたのを、更新日時に関わらず必ずキャッシュするよう修正しています。

現状、dev環境ではリクエスト毎にキャッシュはクリアされるようになっており、更新日時によるチェックは意味が無いため。

dev環境で、更新されたファイルのキャッシュのみ削除する対応については、[WIP] Only clear ActionView caches in dev when files changeで対応中との事です。


Merge pull request #35628 from jhawthorn/file_update_any_extension

activesupport/lib/active_support/evented_file_update_checker.rbの修正です。

FileUpdateCheckerディレクトリ + 空の拡張子を渡した際に、全ての拡張子のファイルをチェック対象にするよう修正しています。


Engines are reloaded in Zeitwerk mode [closes #35618]

activesupport/lib/active_support/dependencies/zeitwerk_integration.rbの修正です。

enginesのコードをmain autoloaderで管理するよう修正してます。

元々はonce autoloaderで管理されており、一度しかloadされないようになっていました。が、engineはアプリ側の定数を参照している事があり、アプリ側のコードが変更&アプリ側のコードがreloadされた際に、engineもreloadしないと更新された値が正しく参照出来ない為、reloadされるようmain autoloaderで管理するように修正しています。


Merge pull request #35634 from sharang-d/update-parameterize-docs

activesupport/lib/active_support/core_ext/string/inflections.rbactivesupport/lib/active_support/inflector/transliterate.rbのdocの修正です。

ActiveSupport::Inflector.parameterizeメソッドのdocにlocaleオプションについての説明を追加、及び、各箇所のフォーマットの修正を行っています。


Support Optimizer Hints

Active Recordの修正です。

Optimizer Hints用のメソッドを追加しています。

# MySQL
Topic.optimizer_hints("MAX_EXECUTION_TIME(50000)", "NO_INDEX_MERGE(topics)")
# SELECT /*+ MAX_EXECUTION_TIME(50000) NO_INDEX_MERGE(topics) */ `topics`.* FROM `topics`

# PostgreSQL(pg_hint_plan)
Topic.optimizer_hints("SeqScan(topics)", "Parallel(topics 8)")
# SELECT /*+ SeqScan(topics) Parallel(topics 8) */ "topics".* FROM "topics"

MySQLは本体でサポートされていますが、PostgreSQLの場合は別途pg_hint_plan moduleのインストールが必要です。