なるようになるブログ

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

rails commit log流し読み(2024/04/04)

2024/04/04分のコミットです。

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

railties/CHANGELOG.md


Merge pull request #51449 from p8/guides/remove-proxy-association

rails guideのActive Record Associationsの修正です。

private APIであるproxy_association accessorについての説明を削除しています。


Allow Actionable Errors encountered when running tests to be retried.

railtiesの修正です。

pendingになっているmigrationがある、などのActionable Errorがテスト実行時に発生した場合に、そのエラーの解消をターミナルから指定&テストの再実行を行えるよう対応しています。


Fix documentation for enqueue_after_transaction_commit

railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_2.rb.ttのdoc、及び、rails guideのConfiguring Rails Applicationsの修正です。

enqueue_after_transaction_commitについてのdocのグラマーやフォーマットの修正を行っています。


Add missing ostruct require to http_token_authentication_test.rb

actionpack/test/controller/http_token_authentication_test.rbの修正です。

不足していたostructのrequireを追加しています。


Arel: make Or nodes "Nary" like And

Active Recordの修正です。

大量のOr条件が指定された場合に、Active Record preloaderでのload処理でSystemStackErrorが発生してしまうバグがあったのを修正しています。Arelのtreeのdepthが深くなりすぎてしまっていたのが問題だった為、Arelのtreeのdepthの管理を変えるよう修正しています。


Stop generating files with git_source(:github)

rails newで生成するGemfileや、bug report templatesからgit_source(:github)の指定を削除しています。Bundlder本体で同等のメソッドを保持しており、Rails側で独自に定義する理由が今は無い為。


Merge pull request #51480 from albus522/dg/improve-vips-analyzer

activestorage/lib/active_storage/analyzer/image_analyzer/vips.rbの修正です。

ruby-vipsでimageのanalyzingを行う際に、Vips::Image#avgメソッドを使用して対象のファイルが画像かどうかをチェックしていたのをしないよう修正しています。Vips::Image#avgはファイルをまるごと読み込むのでメモリを大量に使用する、かつ、画像では無い場合は違う処理でエラーになるので、ここでのチェックが無くても問題無い為。

rails commit log流し読み(2024/04/03)

2024/04/03分のコミットです。

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

activerecord/CHANGELOG.md

activejob/CHANGELOG.md


Fix the ActionRecord typo

ActiveRecordActionRecordにタイポしている箇所があったのを修正しています。


Allow to register transaction callbacks outside of a record

Active Recordの修正です。

recordの外側からtransaction callbacksを登録出来るよう対応しています。このコミットでは、左記の為に下記の対応を行っています。

まず、transactionのcommit後に実行するcallbackを登録する為のActiveRecord.after_all_transactions_commitを追加しています。

def publish_article(article)
  article.update(published: true)
  ActiveRecord.after_all_transactions_commit do
    PublishNotificationMailer.with(article: article).deliver_later
  end
end

上記の例の場合、PublishNotificationMailerはtransactionの外側から呼ばれたか、transactionがコミットされた場合に実行されます。transactionがrollbackされた場合は実行されません。

次に、現在のtransactionを取得する為のActiveRecord::Base.current_transactionを追加しています。こちらもtransactionへのcallbackを登録しやすくする為。

Article.current_transaction.after_commit do
  PublishNotificationMailer.with(article: article).deliver_later
end

最後に、 ActiveRecord::Base.transactionActiveRecord::Transation objectをyieldするよう修正しています。こちらもtransactionへのcallbackを登録しやすくする為。

Article.transaction do |transaction|
  article.update(published: true)
  transaction.after_commit do
    PublishNotificationMailer.with(article: article).deliver_later
  end
end

Implement Active Job enqueue_after_transaction_commit

Active Jobの修正です。

Active Recordのtransaction内でActive Jobのenqueueが行われた場合に、自動でtransaction commit後にjobのenqueueを行うよう修正しています。

Topic.transaction do
  topic = Topic.create(...)
  NewTopicNotificationJob.perform_later(topic)
end

transactionがコミットされる前にenqueueされたjobが、job実行プロセスにピックされてエラーになってしまう、というのがよくある問題で、それを避ける為。この挙動はconfigで変更出来るようになっており、Rails 7.2のデフォルトの設定では上記挙動が有効になっています。無効化したい場合は、config.active_job.enqueue_after_transaction_commit:neverを指定すれば良いようになっています。

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

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

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

activerecord/CHANGELOG.md


Merge pull request #51439 from CodingItWrong/libxml-ruby-fix-install-error

Gemfile.lockの修正です。

libxml-ruby gemを最新バージョンに更新しています。最新バージョンじゃないとlibxml2の最新バージョンでインストール出来ない為。


Add the ability to ignore counter cache columns while they are backfilling

Active Recordの修正です。

counter cacheの値の取得処理(size/any?等)を無効化出来るよう修正しています。無効化したい場合、active: falseオプションを指定すれば良いようになっています。

class Comment < ApplicationRecord
  belongs_to :post, counter_cache: { active: false }
end

後からcounter cache用のカラムを追加したような場合に、カラムはあるがカラムに値が正しく設定されていない時に、値を設定するまで件数の取得処理では使用出来ないようにするために追加されています。値が設定された後は、{ active: false }を削除すれば良いだけになっています。


Add ostruct to the gemfile

Gemfileの修正です。

ostruct gemをGemfileに追加しています。テストで使用している為。

rails commit log流し読み(2024/04/01)

2024/04/01分のコミットです。

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


Reduce contrast of text and inline code elements.

rails guideの修正です。

dark modeでのテキストとinline codeのコントラスト値を調整しています。コントラストが強すぎると文字が読みづらくなる可能性がある為、との事です。

参考:Discuss Maximum Contrast Here


Merge pull request #51439 from CodingItWrong/libxml-ruby-fix-install-error

Gemfile.lockの修正です。

libxml-ruby gemを最新バージョンに更新しています。最新バージョンじゃないとlibxml2の最新バージョンでインストール出来ない為。

rails commit log流し読み(2024/03/30)

2024/03/30分のコミットです。

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


Fix typos on Working with JS page

rails guideのWorking with JavaScript in Railsの修正です。

RollupやWebpackなどのライブラリ名を正式名称に更新しています。


Suggest inverse_of: nil instead of false

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

deprecateメッセージ内の、pluralized nameに対するinvert処理を無効化したい場合にinverse_ofオプションに指定する値が誤っていたのを修正しています。