なるようになるブログ

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

rails commit log流し読み(2017/07/09)

2017/07/09分のコミットです。

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

railties/CHANGELOG.md

actioncable/CHANGELOG.md

activerecord/CHANGELOG.md


Don’t call register on custom drivers

actionpack/lib/action_dispatch/system_testing/driver.rbの修正です。

独自に登録したCapybaraのdriversをsystem testで使用した場合に、NoMethodErrorでエラーになってしまうバグがあったのを修正しています。


Merge pull request #29708 from kamipo/fix_current_timestamp_for_mariadb

activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rbの修正です。

defaultCURRENT_TIMESTAMPが使われているかのチェックを==を使用していたのを、正規表現でチェックするよう修正しています。

-            if type_metadata.type == :datetime && field[:Default] == "CURRENT_TIMESTAMP"
-              default, default_function = nil, field[:Default]
+            if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\(\))?\z/i.match?(field[:Default])
+              default, default_function = nil, "CURRENT_TIMESTAMP"

MariaDB 10.2からCURRENT_TIMESTAMPはfunction(current_timestamp())として扱われるようになり、==では正しくチェック出来なくなった為。


Merge pull request #29706 from kamipo/use_information_schema_to_extract_expression

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

MariaDB 10.2.5以降では、Virtual Columnsの情報をinformation_schemaから取得するようにしています。MariaDB 10.2.5以降ではinformation_schemaからVirtual Columnsの情報が取得出来るようになった為。


Merge pull request #29705 from y-yagi/do_not_update_secrets_yml_enc

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

secrets:editコマンドでsecretを編集する際、secretsを更新しなかった場合もsecrets.yml.encが更新されてしまっていたのを、secretsを更新しなかった場合はsecrets.yml.encが更新されないよう修正しています。


Merge pull request #29695 from y-yagi/secrets_show

railties/lib/rails/commands/secrets/secrets_command.rbの修正です。

secretsを表示する為のsecrets:showコマンドを追加しています。


Merge pull request #29495 from eugeneius/_write_attribute

Active Recordの修正です。

AttributeMethods::Write#_write_attributeメソッドを追加しています。基本的にはwrite_attributesメソッドと同じなのですが、こちらはprimary keyとaliasのチェックを行っておらず、その分高速なので、左記チェックが不要な箇所ではこちらのメソッドを使用するよう修正しています。


Merge pull request #29297 from palkan/fix/action-cable-postgres-identifiers-limit

actioncable/lib/action_cable/subscription_adapter/postgresql.rbの修正です。

Action CableのadapterにPostgreSQLを使用している場合に、stream identifierが64文字以上になった場合、SHA1でハッシュ化した値を使用するよう修正しています。

PostgreSQLではidentifiersに指定出来る文字は63文字まで、という制限がある為。


Merge pull request #29692 from fimmtiu/avoid-translating-non-database-exceptions

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

AbstractAdapter#logメソッドでエラーが起きた際に、RuntimeError以外の全てのエラーをActiveRecord::StatementInvalidにまるめていたのを、まるめ処理を行う範囲をDBに関する処理を行う箇所だけにとどめて、その他のエラーはそのままraiseするよう修正しています。


Merge pull request #28867 from eugeneius/skip_query_cache_in_batches

Active Recordの修正です。

batch処理用のメソッド(find_eachfind_in_batchesin_batches)ではquery cachingは行わないよう修正しています。batch処理でrecordがメモリに残ってしまうのを防ぐ為。


Add backticks [ci skip]

activerecord/CHANGELOG.mdの修正です。

クラス名等にバッククォートを追加しています。


Merge pull request #29715 from reverbdotcom/ptd/fix-invalid-uuids

activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rbの修正です。

中括弧が開き・閉じどちらかだけあるuuid({a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}等)はinvalidとみなすよう、チェック用の正規表現を修正しています。

-          ACCEPTABLE_UUID = %r{\A\{?([a-fA-F0-9]{4}-?){8}\}?\z}x
+          ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z}

(?(cond)yes-subexp|no-subexp)という書き方が出来るんですねえ。

参考:https://github.com/k-takata/Onigmo/blob/3ddfbfcc469a246f8c5bc50072c7e9cdb1e50b22/doc/RE#L293


Treat secrets as binary

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

encrypted secretsの値を読み書きする際に、File.write / File.readを使用していたのを、IO.binwrite / IO.binreadを使用するよう修正しています。

元々、Rails 5.1.1までは、IO.binwrite / IO.binreadを使用していたのが、5.1.2でFile.write / File.readに変更されていました。しかし、それにより、Rails 5.1.1で作成した encrypted secretsをRails 5.1.2で読み込もうとすると、IO.binreadで読み込んだバイナリデータをFile.writeで書き込む事になり、結果エラー(Encoding::UndefinedConversionError)なっていました。

その為、データの書き込みでエラーになるのを避ける為、5.1.1と同じくIO.binwrite / IO.binreadを使用するよう修正しています。


Load environment file in dbconsole command

railties/lib/rails/commands/dbconsole/dbconsole_command.rbの修正です。

dbconsoleコマンド実行時にenvironment fileを読み込むよう修正しています。database.ymlにenvironment fileに指定した値を使用出来るようにする為。


Use frozen-string-literal in ActiveSupport

Active Supportの修正です。

各ファイルの先頭にfrozen_string_literal: trueを追加しています。


Merge pull request #29655 from kirs/frozen-friendly-ap-ar

Action Pack、Action Viewの修正です。

各ファイルの先頭にfrozen_string_literal: trueを追加、及び、Stringを変更する箇所でdupを呼び出すよう修正しています。