なるようになるブログ

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

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

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

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


Action Cable assert_broadcasts API docs [ci skip]

actioncable/lib/action_cable/test_helper.rbのdocの修正です。

assert_broadcastsのdoc内にあるexampleコードが、assert_broadcastsを送信したmessagesを返す旨説明が記載されていたのを修正しています。実際はassert_broadcastsはmessagesを返さない(Introduce capture_emails and capture_broadcastsで変更された)為。


[RF DOCS] Add documentation for perform_all_later to Active Job Basics guide [ci-skip] (#51004)

rails guideのActive Job Basicsの修正です。

jobのbulk enqueue処理についての説明を追加しています。


Fix delegated type example

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

ActiveRecord::DelegatedType moduleのdoc内の、delegatorとdelegateeを同時に作成するexampleコードが正しく動作しないコードになっていたのを修正しています。


Address ApplicationTests::FrameworksTest failure on Ubuntu 22.04

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

ApplicationTests::FrameworksTestが使用するMySQL clientによってfailしてしまっていた(clientが返すエラーがバージョンによって違う事による影響)のを修正しています。


Address ApplicationTests::DBConsoleTest failures against asserion enabled Ruby

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

db consoleのテストで結果が取得できるまでのtimeoutの時間を伸ばしています。


Refactor BindParameterTest

Active Recordのテストの修正です。

BindParameterのテストについて、期待される動作がより明確になるようassert処理を修正しています。

rails commit log流し読み(2024/02/19)

2024/02/19分のコミットです。

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


Merge pull request #51113 from ghiculescu/patch-12

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

config.active_storage.queues.preview_image及びconfig.active_storage.queues.transformについての説明を追加しています。


Add links to config.active_job.default_queue_name

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

Active Jobのqueue nameに関するconfigについて説明している箇所に、config.active_job.default_queue_nameへの説明へのリンクを追加しています。


Merge pull request #51042 from lsglucas/docs/security

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

rack-cors gem 用のinitializerのexampleが現在は動かないコードになっていたのを修正しています。

rails commit log流し読み(2024/02/18)

2024/02/18分のコミットです。

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


Rewrite connection reaper test with timeout

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

connection reaper testにtimeoutの処理を追加しています。CIでテスト中にdeadlockが発生してしまいテストが応答無しになってしまうという問題があり、その一時対応としてtimeoutを設定し一定時間経ったらテストを強制的に終了するよう修正しています。

rails commit log流し読み(2024/02/17)

2024/02/17分のコミットです。

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

activerecord/CHANGELOG.md


Ignore devcontainer files in docker image

railties/lib/rails/generators/rails/app/templates/dockerignore.ttの修正です。

dockerignoreにdevcontainer用のファイルを追加しています。


Add MessagePackMessageSerializer for binary data (#51102)

activerecord/lib/active_record/encryption/encrypted_attribute_type.rbactiverecord/lib/active_record/encryption/message_pack_message_serializer.rbの修正です。

encrypted dataをMessagePack formatにserializeする為のActiveRecord::Encryption::MessagePackMessageSerializerを追加しています。 通常はBase64でencodeされているのですが、Binary columnの場合はBase64でencodeする必要は無くデータ効率が良くない為、より効率的にserialize出来るようにする為にMessagePack formatをサポートしています。このserializerは自動ではロードされないようにっており、使用する場合はユーザ側で明示的に指定する必要があります。

require "activerecord/encryption/message_pack_message_serializer"

class Foo < ApplicationRecord
  encrypts :bar, message_serializer: ActiveRecord::Encryption::MessagePackMessageSerializer.new
end

Fix quote

activestorage/test/dummy/config/puma.rbの修正です。

pidfileにファイル名を指定する箇所のクォートが不足していたのを修正しています。


Do not report rendered errors except 500

actionpack/lib/action_dispatch/middleware/executor.rbactionpack/lib/action_dispatch/middleware/show_exceptions.rbの修正です。

ActionDispatch::Executor: report errors handled by ShowExceptionsShowExceptions middlewareでhandleしたexceptionを全てerror reporterでreportするよう修正したのですが、ActionController::RoutingErrorのようなアプリケーションで正しく処理されたエラーはreportしないよう修正しています。reportするかどうかはActionDispatch::ExceptionWrapper.rescue_responsesに指定されているかどうかで判断されるようになっています。


Prevent extra newlines after table generation block in shema.rb (#48731)

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

shema.rbでforeign keysが無い場合に不要な空行が生成されてしまっていたのを修正しています。


Merge pull request #51043 from jasl/ac-expose-close-args

actioncable/lib/action_cable/connection/web_socket.rbの修正です。

websocket.close、及び、websocket.transmitに任意の引数を指定出来るよう修正しています。WebSocket connectionをcloseする際にデバッグ用にcode及びreasonを送りたい事があるため、との事です。

rails commit log流し読み(2024/02/16)

2024/02/16分のコミットです。

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

activerecord/CHANGELOG.md


Support encrypting binary columns (#50920)

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

Active Record Encryptionでbinary columnを指定出来るよう修正しています。


Refactor Rails::Rack::Logger to avoid adding a new param to call_app

railties/lib/rails/rack/logger.rbの修正です。

Don't pop logger tags in Rails::Rack::Logger until request is finishedRails::Rack::Logger#call_appメソッドに引数を追加したのですが、引数の追加はしないで対応するようリファクタリングしています。 Rails::Rack::Logger#call_appをオーバーライドしているgemがあり、gemの挙動が壊れないようにする為。


Update test suite for compatibility with Ruby 3.4-dev

テストの修正です。

Ruby 3.4で、backtraceにメソッド名だけでなくメソッドのオーナーも含むよう修正、及び、backtraceとエラーメッセージにbacktickを含まないよう修正されたことによりfailしまっていたテストをまとめて修正しています。

参考:

rails commit log流し読み(2024/02/15)

2024/02/15分のコミットです。

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

actionpack/CHANGELOG.md

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Allow .test by default in development (#51087)

actionpack/lib/action_dispatch/middleware/host_authorization.rbの修正です。

development envのデフォルトのallowed hostに.testドメインを追加しています。puma/puma-devがデフォルトで.testドメインを使用するようになっており、設定の追加無しで使用出来るようにするため。


Add missing super in prune_thread_cache method

activerecord/lib/active_record/connection_adapters/abstract/query_cache.rbの修正です。

prune_thread_cachesuperの呼び出しが不足していたのを修正しています。


Use ruby file: ".ruby-version" for new apps

railtiesの修正です。

rails newで新規にアプリケーションを作成した際に、GemfileRubyのバージョンを指定するのに.ruby-version(ruby file: ".ruby-version")を使用するよう修正しています。Gemfile.ruby-versionそれぞれで同じバージョンを指定するのを避けるようにするため。が、後ほどRevertされています。


Merge pull request #51084 from anonychun/dont-override-ld-preload

railties/lib/rails/generators/rails/app/templates/docker-entrypoint.ttの修正です。

docker-entrypointLD_PRELOADがすでに設定されている場合、jemalloc用のLD_PRELOADで既存の設定を上書きしないよう修正しています。


[RF DOCS] Review Action Mailbox guide [ci-skip] (#50973)

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

guide全体について、フォーマットや言い回しの修正、configの説明の追加等を行っています。


[RF DOCS] Review Action Text guide [ci-skip] (#50977)

rails guideのAction Text Overviewの修正です。

guide全体について、フォーマットや言い回しの修正、exampleコードの追加等を行っています。


Better flow for puma.rb

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

条件分岐処理の整理、コメントの追加などを行っています。


Merge pull request #51064 from mkasberg/debugging-guide

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

Breakpoint Optionsセクションのタイポの修正を行っています。


Remove extra new line in the generated Gemfile

railties/lib/rails/generators/rails/app/templates/Gemfile.ttの修正です。

rails newで生成されるGemfileから不要な空行を削除しています。


Revert "Merge pull request #49360 from skipkayhil/hm-gemfile-ruby-file"

GemfileRubyのバージョンを指定するのに.ruby-version(ruby file: ".ruby-version")を使用するよう修正した、Use ruby file: ".ruby-version" for new appsをRevertしています。

この変更を適応した場合、bundleを実行するにはパッチバージョンまで正確に一致したRubyがインストールされている必要があるのですがdevcontainerではパッチバージョンまで一致したRubyのimageが提供されておらず、devcontainer環境で使用しようするとエラーになる、という問題が発生したためRevertされています。パッチバージョンを指定出来る独自のRuby imageの作成を行ってから、再度適用予定との事です。


Merge pull request #51055 from zzak/preview_docs

API doc 及び Guideのpreview用のHTMLを生成するためのrake taskを追加しています。buildkiteでpreview用のHTMLを生成し、PRの段階で変更を確認出来るようにするため。


Merge pull request #51034 from rails/rm-schema-cache-loading

Active Recordの修正です。

schema cache dumpをeager loadする為のinitializerを削除しています。Refactor Active Record Schema Cache to not hold a connectionの対応により、define_attribute_methodsのinitializerの中でeager loadされるようになっている為、合わせて、schema cacheのpathを指定する為のENV["SCHEMA_CACHE"]をdeprecatedにしています。今後は、configファイルの:schema_cache_pathに指定する必要があります。


Merge pull request #50914 from andrewn617/devcontainer

railtiesの修正です。

rails newで新規にアプリを作成時にDevcontainer用の設定を作成するよう修正しています。containerには、RDBMS、Redis、Headless chrome等テストや開発のために必要なcontainerが一通り含まれるようになっています。

合わせて、System Testで使用するアプリケーションサーバを変更するためのserved_byメソッドを追加しています。Devcontainerで実行しているアプリケーションを指定出来るようにする為。

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  served_by host: "testserver", port: 45678
end

Merge pull request #49655 from Shopify/fix-cpk-update-all-with-join-subquery

Active Recordの修正です。

composite primary keysを使用しているmodelをjoinしてupdate_all/delete_allを実行した場合に、誤ったSQLが生成されてしまうバグがあったのを修正しています。


Add autoload for ActionController::TestRequest

actionpack/lib/action_controller.rbの修正です。

ActionController::TestRequestをautoloadの対象に追加しています。ActionController::TestCaseに依存していない処理でも使用している為。


Use consistent ENV.fetch style

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

ENV.fetchでデフォルト値を指定する場合のスタイルを統一しています。


Merge pull request #51016 from javierav/optimistic-locking-doc

activerecord/lib/active_record/locking/optimistic.rbのdocの修正です。

ActiveRecord::Locking::Optimistic moduleのdocに、lock_version columnはintegerである必要がある旨説明を追加しています。


Style

railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.ttrailties/lib/rails/generators/rails/app/templates/config/environments/test.rb.ttの修正です。

configの値を指定する際のフォーマットの修正を行っています。


Merge pull request #51093 from seanpdoyle/action-view-rendered-memoization

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

ActionView::TestCase内のrenderedのメモ化処理を削除しています。テストでviewのrender処理を複数回呼び出した際に、呼び出し毎に正しい結果が得られるようにする為。


ActiveRecord::TestCase: reap all leaked connection on teardown

activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rbactiverecord/test/cases/test_case.rbの修正です。

ActiveRecord::TestCaseのteardown処理で、全てのleaked connectionのreap処理を行うよう修正しています。他のテストでconnectionのclear処理を行った場合に影響が出ないようにする為。


Refactor SchemaCache to hold a ConnectionPool

Active Recordの修正です。

SchemaCacheConnectionPoolを保持するようリファクタリングしています。 Decouple transactional fixtures and active connectionsなどと同様に、PoC: Add an option to disable connection checkout cachingに関連したリファクタリングの一環です。全てのconnectionがBoundSchemaReflectionを保持するよりも、BoundSchemaReflection経由でconnectionを取得出来た方が効率が良いだろう、という事で修正されたようです。

rails commit log流し読み(2024/02/14)

2024/02/14分のコミットです。

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

railties/CHANGELOG.md

activerecord/CHANGELOG.md


Don't load *_test.rb file from the "fixtures" folder:

railties/lib/rails/test_unit/runner.rbの修正です。

bin/rails test実行時にfixturesフォルダ配下にあるテストファイル(*_test.rb)をロードしないよう修正しています。


Raise error for Trilogy when prepared_statements is true

activerecord/lib/active_record/connection_adapters/trilogy_adapter.rbの修正です

Trilogyでサポートしていないprepared_statements: trueがconfigファイルで指定された場合に、ArgumentErrorをraiseするよう修正しています。


Register autoload for ActiveJob::Arguments

Active Jobの修正です。

ActiveJob::Argumentsをautoloadの対象に追加しています。[Fix #50713] Do not trigger loading of ActiveJob::Base in ActiveJob::TestHelperの対応により、ActiveJob::Argumentsをrequireしていないが使用する、というケースがtest envで発生するようになっており、そのための対応との事です。


Merge pull request #51019 from jhawthorn/key-provider

activerecord/lib/active_record/encryption/encrypted_attribute_type.rbactiverecord/lib/active_record/encryption/scheme.rbの修正です。

encryption_optionsdecryption_options、及び、key_providerの値をメモ化しないよう修正しています。with_encryption_contextでそれらの値をoverride出来るようにするため。


Merge pull request #51035 from rails/rm-docs-actioncable

Action Cableのdocの修正です。

docのフォーマットをMarkdownに変更しています。


Merge pull request #51063 from anonychun/speedup-docker-build-time

railtiesの修正です。

rails newで生成するDockefileで、同じ依存パッケージを複数回インストールしてしまっている箇所があったのを、同じパッケージについて重複してインストール処理が実行されないよう修正しています。


Deprecate config.active_record.warn_on_records_fetched_greater_than (#51007)

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

config.active_record.warn_on_records_fetched_greater_thanをdeprecatedにしています。Add row_count field to sql.active_record notification:row_count fieldをsql.active_record hookのpayloadに追加しており、レコード数のチェックをしたい場合その値を使用すれば良くなったため。


Merge pull request #51040 from hendrixfan/remove-rollup-option

actioncable/rollup.config.jsの修正です。

rollup.config.jsで不正なconfig名を指定していたのを削除しています。


Address Defining enums with keyword arguments warning in Action Mailbox

actionmailbox/app/models/action_mailbox/inbound_email.rbの修正です。

Deprecate defining enums with keywords argsでdeprecatedになったenumの記法を使用している箇所があったのを修正しています。


Update Method#duplicable? to be consistent with Ruby 3.4

activesupport/lib/active_support/core_ext/object/duplicable.rbの修正です。

Method#duplicable?Ruby 3.4でTypeErrorをraiseしてしまう場合があったのを修正しています。Ruby本体でProc, Method, UnboundMethod及びBindingのclone/dupの挙動が整理された影響との事です。

参考: proc.c: get rid of CLONESETUP


Merge pull request #50938 from Shopify/refactor-query-cache-to-pool

Active Recordの修正です。

connection poolでQueryCacheを保持するようリファクタリングしています。transactional fixturesをconnectionのキャッシュに依存しないようリファクタリングした、Decouple transactional fixtures and active connectionsと同様に、connectionのキャッシュを削除しても動作するようにする為の対応の一環。


Refactor some Active Record tests

Active Recordのテストの修正です。

adapter nameを取得するのに#adapter_nameメソッドを使用するよう修正、connectionのインスタンスに対しテスト内で独自のモンキーパッチを使用していたのを既存のメソッドで対応するよう修正、及び、SCHEMA queryを無視するよう修正しています。


Add ActiveRecord::Base.with_connection as a shortcut

Active Recordの修正です。

指定されたblockの中でのActiveRecord::Base.connectionの呼び出しが全て同じconnectionを返すための、ActiveRecord::Base.with_connectionを追加しています。 特定のリクエストやジョブの実行時で、同じconnectionで処理が実行される事を保証したい場合に使用する事を想定しているようです。


Remove a forgotten :nodoc:

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

先程追加されたActiveRecord::Base.with_connectionAPI docに表示されるよう修正しています。


Improve ConnectionHandlingTest

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

assertionでチェックするconnectionを間違えている箇所があったのを修正しています。