なるようになるブログ

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

rails commit log流し読み(2024/07/26)

2024/07/26分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #52339 from Shopify/fix-file-update-shared-tests

activesupport/test/file_update_checker_shared_tests.rbactivesupport/test/file_update_checker_test.rbの修正です。

FileUpdateCheckerSharedTests moduleでclass_evalを使用しないよう修正しています。


Add cvv and cvc as default parameters to filter out in new apps

railties/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.ttの修正です。

filter対象のデフォルトparamtersにcvvcvcを追加しています。StripeやBraintreeでクレジットカードの情報を送信するのに使用されているparamterで、それらの情報が誤ってログに含まれないようにするため、デフォルトのfilter対象に追加しています。


Use SQLite IMMEDIATE transactions when possible.

Active Recordの修正です。

SQLite3 adapterで、使用出来る場合はIMMEDIATE transactionをデフォルトで使用するよう修正しています。元々のデフォルトはDEFERREDだったのですが、DEFERREDだと複数transation実行した場合にtransaction中にReservedロックがとれずエラー(SQLite3::BusyException)になってしまうのが問題になる事があり、それよりも、ロックをとっている処理が長い事により並列性が多少下がってもエラーになる事が無いIMMEDIATEの方がデフォルトとして良いのでは、という事で変更になったようです。

参考:Transaction

rails commit log流し読み(2024/07/25)

2024/07/25分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge pull request #52408 from ghiculescu/as-find-signed-docs

activestorage/app/models/active_storage/blob.rbのdocの修正です。

ActiveStorage::Blob#find_signed!のdoc内のrecord argumentに不正な値が指定された場合の挙動が実際の挙動と異なっていたのを修正しています。


Merge pull request #52402 from jhawthorn/avoid_extra_pings

activerecord/lib/active_record/connection_adapters/mysql2/database_statements.rbactiverecord/lib/active_record/connection_adapters/trilogy/database_statements.rbの修正です。

mysql2/trilogy adapterで、multi-statementのresultsをwith_raw_connectionを使用せずに破棄するよう修正しています。元々はwith_raw_connection block内処理を行っていたのですが、それだとquery cacheにヒットした場合、verfiy!を実行するようになっており、それが原因で性能に少し影響が出ていました(ネットワークのround tripが発生してしまうため)。該当の箇所でconnect/reconnectをする事は無いなので、with_raw_connectionを使用せずに現在のconnectionを使用して破棄するよう修正しています。


More robust fix for duplicate callbacks when singular child autosaves parent

activerecord/lib/active_record/autosave_association.rbの終了です。

子associationのautosave経由で親associationの新規作成を行った際にcallbackが複数回実行されないようにする処理について、対応のコードをリファクタリングしより確実にチェックを行えるよう修正しています。


Fix test command to exit 1 on LoadError

railties/lib/rails/commands/test/test_command.rbrailties/lib/rails/test_unit/runner.rbの終了です。

test commandに存在しないファイルが指定された場合のexit codeが正常(0)だったのが、エラー(1)となるよう修正しています。


Merge pull request #52329 from fatkodima/loaded-relation-batching-cpk

activerecord/lib/active_record/relation/batches.rbの修正です。

load済みのrelationに対するバッチ処理が、composite primary keysを使用しているmodelに対して正しく動作しないバグがあったのを修正しています。

rails commit log流し読み(2024/07/24)

2024/07/24分のコミットです。

CHANGELOGへの追加はありませんでした。


Fix specs for QueryLogsTest#test_sql_commenter_format.

activerecord/test/cases/query_logs_test.rbの修正です。

Optimize ActiveRecord::QueryLogsの影響で、QueryLogsのテストがfailするようになっていたのを修正しています。


Revert rails/rails#52303

routing source locationsを、rails routes実行時にのみ有効化するよう修正した、Only enable routing source locations when using routes commandをRevertしています。/rails/info/routesでもsource locationを使用しており、この修正の影響で/rails/info/routesが正しく表示されなくなってしまったため。


Add regression test for development routes source mapping

railties/test/rails_info_controller_test.rbの修正です。

/rails/info/routesでsouting source locationsを使用している事を確認するテストを追加しています。


Freeze modifications to ActiveRecord::QueryLogs

ActiveRecord::QueryLogs@taggings@tagsをfreezeして、動的に値を変更出来ないよう修正しています。これらの値はassigned時にキャッシュを生成するよになっており、動的に値を変更する事は想定されていませんでした。そのため、そもそも値を変更出来ないようにする為に、変数をfreezeするよう修正しています。

rails commit log流し読み(2024/07/23)

2024/07/23分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge pull request #52186 from jackozi/missing-on-cpk

activerecord/lib/active_record/relation/query_methods.rbの修正です。

composite primary keysを使用しているassociationに対するmissing(:association)及びassociated(:association)がエラーになってしまうバグがあったのを修正しています。


Merge pull request #51996 from jackozi/exists_on_composite_keys

activerecord/lib/active_record/associations/collection_association.rbの修正です。

composite primary keysを使用しているassociationに対するinclude?がエラーになってしまうバグがあったのを修正しています。


Merge pull request #52389 from ghiculescu/patch-12

rails guideのActive Storage Overviewの修正です。

S3のcorsの設定に関するドキュメントへのリンクが誤ったドキュメントへのリンクになっていたのを修正しています。


Merge pull request #52375 from lairtonmendes/action_mailbox_mailgun

rails guideのAction Mailbox Basicsの修正です。

Mailgunの設定についてドキュメントへのリンクを最新のドキュメントへのリンクに修正しています。


Address ApplicationTests::QueryLogsTest errors

activerecord/lib/active_record/railtie.rbの修正です。

Optimize ActiveRecord::QueryLogsの対応の影響で、configで指定した値がActiveRecord::QueryLogsに正しく反映されなくなってしまっていたのを修正しています。


Document config.action_dispatch.always_write_cookie

rails guideのConfiguring Rails Applicationsの修正です。

config.action_dispatch.always_write_cookieについての説明を追加しています。

rails commit log流し読み(2024/07/22)

2024/07/22分のコミットです。

CHANGELOGへの追加はありませんでした。


Update ruby-vips to fix a method redefinition warning

Gemfile.lockの修正です。

ruby-vips gemを最新バージョンに更新しています。Rubyのwarningが表示されないようにする為。


Optimize ActiveRecord::QueryLogs

activerecord/lib/active_record/query_logs.rbactiverecord/lib/active_record/query_logs_formatter.rbの修正です。

ActiveRecord::QueryLogsのログ出力でオブジェクト生成数を減らせるようリファクタリングしています。

rails commit log流し読み(2024/07/20)

2024/07/20分のコミットです。

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

activesupport/CHANGELOG.md


Merge pull request #52359 from fatkodima/fix-find_or_initialize_by-for-cpk-associations

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

composite primary keysを使用しているassociationに対するfind_or_initialize_byのfind処理が正しく行われないバグがあったのを修正しています。


Merge pull request #52366 from Shopify/require-hotloop

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

ConfigurationFile#readメソッド内のyamlerbのrequire処理を、それぞれ必要な時のみ(gemがloadされてない場合のみ)実行するよう修正しています。

Ruby 3.3でコード中のrequireがRuby 3.2までと比べて大変遅くなっているようで、テスト等でConfigurationFile#readが実行された際の性能の改善の為修正を行っています。

参考:Bug #20641: `lib/bundled_gems.rb` makes `Kernel.require` over 100x slower


Merge pull request #52347 from jhawthorn/time_change_workaround

activesupport/lib/active_support/core_ext/time/calculations.rbの修正です。

幾つかのRubyに、Time zoneオブジェクトを指定したTimeオブジェクトが誤ったutc offsetを返してしまう、というバグがあり、そのバグの為のworkaroundを追加しています。このバグはRuby 3.3.1及び3.2.4で修正済みです。

参考:Bug #20327: Time.new behaves differently when passing a zone as timezone object


Merge pull request #52370 from jhawthorn/time_addition_deprecation

activesupport/lib/active_support/core_ext/time/calculations.rbactivesupport/lib/active_support/time_with_zone.rbの修正です。

Time及びActiveSupport::TimeWithZone#since及び#+に対して、Time及びActiveSupport::TimeWithZoneインスタンスを指定した場合(e.g. Time.now.since(Time.now)10.days.ago + 10.days.ago)の挙動をdeprecatedにしています。現在、これらを実行しても正しい結果を得られない状態で、挙動としてサポートする必要も無いだろう、という事でdeprecateにしています。