なるようになるブログ

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

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

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

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

activerecord/CHANGELOG.md


Fix test failures when prepared statements are disabled

Active Recordの修正です。

先日行われたActive Recordのリファクタリング(Refactor Active Record to let Arel manage bind params)の影響で、prepared statementsをdiableにした場合にテストがコケていたのを修正しています。

partial queryを管理するためのcolletor classを作ったりして、まだちょっとリファクタリングを行っています。


Include rack-mini-profiler by default

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

デフォルトで生成されるGemfileMiniProfiler/rack-mini-profilerを追加しています。

が、まだ議論がされきってないのと、rack-mini-profilerはモンキーパッチだらけで良くないのではという事で、後ほどrevertされています。


Revert “Include rack-mini-profiler by default”

というわけで、直前のrack-mini-profilerをデフォルトのgemに追加した対応をrevertしています。


Merge pull request #29765 from lugray/fix_counter_cache

activerecord/lib/active_record/associations/builder/belongs_to.rbactiverecord/lib/active_record/counter_cache.rbの修正です。

after_create callbackの中でupdate_attributesを使用した、かつ、複数のbelongs_to assocationがあり、それぞれcounter cachesを使用している場合に、更新処理でcounter cachecが一度しかインクリメントされない事を確認するテストを追加しています。

元々は、上記条件の場合に2回インクリメントがされてしまっていたのですが、そちらのバグは違うコミットで直ってしまっていたので、このコミットではリグレッションテストだけを追加しています。


Merge pull request #29792 from lugray/delegate_respond_to

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

ActionView::Helpers::ControllerHelper moduleにrespond_to?メソッドを定義し、ControllerHelperがcontrollerにdelegateするメソッド(request_forgery_protection_tokenparams等)については、controllerに対してrespond_to?を行うよう修正しています。


Merge pull request #29853 from lugray/move_generator_namespacing_to_base

railties/lib/rails/generators/base.rbrailties/lib/rails/generators/named_base.rbの修正です。

NamedBaseクラスに定義されていたnamespaceに関するメソッドを、Baseクラスに移動しています。namespaceを正しく扱えてないgeneratorでnamesapceを扱えるようにする為、との事です。んー、メソッド移動せず、NamedBaseクラスを使用するよう修正する、で良さそうな気もしたのですが…。


Merge pull request #29902 from y-yagi/fix_29880

railties/lib/rails/commands/server/server_command.rbの修正です。

Pumaを使用している際、rails serverの起動メッセージにURLの情報(e.g. Rails 5.1.2 application starting in development on http://localhost:3000on http://localhost:3000の部分)を出力しないよう修正しています。

PumaはPuma自体で独自のconfigを持てる、かつ、そこでhostやportの情報が定義出来てしまい、rails serverでは実際に起動する際にしようするhostやportの情報を正しく知る事が出来ない為。


Fix warning: assigned but unused variable - comment

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

test_multiple_counter_cache_with_after_create_updateから、使用していない変数を削除しています。


Merge pull request #29848 from kamipo/fix_distinct_count_with_order_and_limit

Active Recordの修正です。

Avoid unscope(:order) when limit_value is presented for countで、limit_valueが指定されている場合はunscope(:order)`を行わないよう修正したのですが、その影響でDISTINCT + COUNT + ORDER BY + LIMITを実行した場合に、不正なSQLが生成されてしまいエラーになってしまうバグがあったのを修正しています。

# before
User.distinct.order(updated_at: :desc).limit(10).count
# SELECT COUNT(DISTINCT count_column) FROM (SELECT  DISTINCT "users"."id" AS count_column FROM "users" ORDER BY "users"."updated_at" DESC LIMIT $1) subquery_for_count  [["LIMIT", 10]]
# ActiveRecord::StatementInvalid: PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...users"."id" AS count_column FROM "users" ORDER BY "users"."u...
# : SELECT COUNT(DISTINCT count_column) FROM (SELECT  DISTINCT "users"."id" AS count_column FROM "users" ORDER BY "users"."updated_at" DESC LIMIT $1) subquery_for_count


# after
User.distinct.order(updated_at: :desc).limit(10).count
# SELECT COUNT(*) FROM (SELECT  DISTINCT "users".* FROM "users" ORDER BY "users"."updated_at" DESC LIMIT $1) subquery_for_count  [["LIMIT", 10]]

Merge pull request #29897 from kirs/frozen-actionview

Action Viewの修正です。

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


Suppress warning from actionview controller helper.

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

ActionView::Helpers::ControllerHelper moduleでRubyのwarning(`*' interpreted as argument prefix)が出ていたのをで、中括弧を追加し対応しています。


Merge pull request #29859 from dwightwatson/feature/rack-test

actionpack/actionpack.gemspecの修正です。

rack-testのが0.6系を使用するよう固定されていたのを、バージョンの上限ロックを行わないよう修正しています。

-  s.add_dependency "rack-test", "~> 0.6.3"
+  s.add_dependency "rack-test", ">= 0.6.3"

remove depreciated assertion to eliminate warning

activesupport/test/hash_with_indifferent_access_test.rbの修正です。

assert_equalメソッドのexpected引数にnilを指定していたテストを、assert_nilを使用するよう修正しています。

Minitest 5.10から上記使い方がdeprecateになり、nilを期待する場合はassert_nilが使用する必要がある為。


Merge pull request #29898 from deivid-rodriguez/follow_up_to_multiple_location_engine_mounting

actionpack/lib/action_dispatch/routing/mapper.rbactionpack/lib/action_dispatch/routing/routes_proxy.rbの修正です。

一つのRails Engineを異なるlocationにmount出来るよう修正した、Allow mounting the same engine several times in different locations.の影響で、engineの route helpersを使用した際に正しいpathが取得出来ないバグが出来てしまっていたのを修正しています。


Merge pull request #29866 from rlue/master

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

ActionController::Parameters#deleteメソッドのdocで、引数に指定されたkeyが存在しなかった場合の挙動の説明が実際の挙動と異なっていた(説明には、keyが存在しなかったからdefault valueを返すと書かれていたのが、実際返ってくるのはnil)のを修正しています。


Fix warning: ambiguous first argument

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

db:schema:loadのテストでRubyのwarning(warning: ambiguous first argument; put parentheses or a space even after)が出ていたので、中括弧を追加し対応しています。


Merge pull request #29919 from kirs/actionpack-frozen-friendly

Action Packの修正です。

ファイルの先頭にfrozen_string_literal: trueを追加、及び、Stringを変更する箇所でdupを呼び出す等行い、エラーにならないよう対応しています。


Stop creating ApplicationRecord on model generation

Active Record、railtiesの修正です。

application_record.rbが存在しない場合に、model generatorが自動でapplication_record.rbを生成するようにしていたのを、生成しないよう修正しています。

元々Rails 5.0でapplication_record.rbが導入された際に、移行用に自動で生成するようになっていたのですが、もう移行は不要だろうという事で生成しないようになっています。

代わりに、application_record.rbを生成する為のgeneratorが追加されたので、今後application_record.rbが必要になった場合は、そちらを使用する事で対応可能です。


Fix test_add_column_with_timestamp_type when using Oracle

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

test_add_column_with_timestamp_typeのテストがOracle adapterでエラーになっていたのを修正しています。


Extract assert_output and available_pty? into ConsoleHelpers module

railtiesのテストの修正です。

各テストクラスで独自に定義していたconsole test用のヘルパーメソッドをmodule(ConsoleHelpers)に切り出しています。


Suppress deprecated warning in Action Cable

Gemfile.lockの修正です。

event_emitter gemのバージョンを0.2.6に更新しています。0.2.6でFixnumに関する対応を行われており、deprecateメッセージが出ないようになっている為。

参考:Fix Fixnum warning on Ruby 2.4+


[ci skip] Add documentation for after_create_commit and after_update_commit callbacks

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

Transaction Callbacksの項に、after_create_commitafter_update_commitを同じmodelに同時に定義した場合、後勝ち(後で定義した方のみ実行される)になってしまう事についての説明を追加しています。


Remove useless JoinInformation

Active Recordの修正です。

Refactor Active Record to let Arel manage bind paramsの対応により不要になったJoinInformation Structを削除しています。


Remove unused queries_predicates

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

Refactor Active Record to let Arel manage bind paramsの対応により不要になったqueries_predicatesメソッドを削除しています。


Fix dbconsole test when tempdir is a long path

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

dbconsoleのテストで、DB名を取得するのに.databasesを使用していたのを、pragma database_list;を使用するよう修正しています。

.databasesだとpathが長い場合に適当なサイズに結果がトランケートされてしまい、正しく値が取得されない事がありました。しかしpragma database_listだと結果がトランケートされない為、そちらを使用するようにしたとの事です。


Fix failing tests

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

Arelにdelegateするメソッドの一覧からbind_valuesを削除しています。

bind_valuesもう使わなくなった為。参考:Remove unused bind_values

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

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

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

activesupport/CHANGELOG.md


Use frozen string literal in actionmailer/

Action Mailerの修正です。

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


Make actionview ready for frozen strings

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

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


Make actioncable ready for frozen strings

actioncable/lib/action_cable/channel/base.rbの修正です。

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


Use frozen string literal in actioncable/

Action Cableの修正です。

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


Merge pull request #29860 from georgeclaghorn/travel-back-automatically

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

TimeHelpers moduleでafter_teardownメソッドを定義し、テスト終了時に自動でtravel_backを呼び出すよう修正しています。

これにより、block無しのtraveltravel_toを使用した場合に、明示的にtravel_backを呼ぶ必要は無くなります。 Remove automatic removal of Date/Time stubs after each test caseで一度同様の対応が削除された事があったのですが、自動でtravel_backした方が便利だろう、という事で再度入ったようです。


document metadata support added to message encryptor and message verifier

activesupport/lib/active_support/message_encryptor.rbactivesupport/lib/active_support/message_verifier.rbのdocの修正です。

ActiveSupport::MessageEncryptorクラス、ActiveSupport::MessageVerifierクラスのdocにpurposeオプションやメッセージにexpireを設定する場合の方法についてのドキュメントを追加しています。


add to changelog: purpose and expiry support

MessageVerifierMessageEncryptorpurposeexpires_inexpires_atオプションを設定出来るようにした対応(Add purpose and expiry to messages encrypted using Message EncryptorAdd Expiry & Purpose to Message Verifier)についてエントリーを追加しています。

purposeオプションはメッセージの生成時 / 確認時に指定する事が出来、purposeの値が一致しないと、メッセージの確認が出来ないようになっています。

token = @verifier.generate("this is the chair", purpose: :login)

@verifier.verified(token, purpose: :login)    # => "this is the chair"
@verifier.verified(token, purpose: :shipping) # => nil
@verifier.verified(token)                     # => nil

expires_inexpires_atは名前の通りでメッセージに対してexpireする日付・期間を指定する事ができます。指定された日付を超えた場合、そのメッセージは確認出来なくなります。


[ci skip] Remove superfluous paragraphs; fully qualify constants.

activesupport/CHANGELOG.mdの修正です。

先のMessageVerifierMessageEncryptorの対応についてのエントリーを整理しています。


add metadata tests: verify method

activesupport/test/message_verifier_test.rbの修正です。

ActiveSupport::MessageVerifier#verifyメソッドについてのテストを追加しています。


Fix test failure in message verifier tests

activesupport/test/message_verifier_test.rbの修正です。

ActiveSupport::MessageVerifierクラスのテストで現在時刻を取得するのにTime.localを使用していたのを、Time.utcを使用するよう修正しています。Time.localだとテストを実行する環境のTimezoneに結果が依存してしまい、環境によってはテストがコケてしまう為。


Fix warnings in railties tests

Gemfileの修正です。

sass-rails gemを使用するのに、リリース済みのgemではなく、GitHubのブランチを指定するよう修正しています。

リリース済みのsass-railsだとasset_data_urlの再定義に関するwarningが出てしまうのですが、上記ブランチだとその問題が解決済みな為。


Merge pull request #29894 from eugeneius/check_schema_file_dup_string

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

check_schema_fileメソッドでschema fileが存在しない場合に出力するメッセージをdupするよう修正しています。

-          message = %{#{filename} doesn't exist yet. Run `rails db:migrate` to create it, then try again.}
+          message = %{#{filename} doesn't exist yet. Run `rails db:migrate` to create it, then try again.}.dup
           message << %{ If you do not intend to use a database, you should instead alter #{Rails.root}/config/application.rb to limit the frameworks that will be loaded.} if defined?(::Rails.root)

直後にmessage変数に値を追加しており、dupしないとfrozen_string_literaltrueを指定している場合にエラーになってしまう為。


Refactor Active Record to let Arel manage bind params

Active Recordの修正です。

Active Recordで行っていたbind paramsの管理をArelで行うようリファクタリングしています。

ASTと、ASTに深く関連しているbind paramsを別に管理しようとして、コードが複雑、かつ、バグが多い状態になっていました。これを、ASTで直接bind paramsを保持するようリファクタリングし、Arel側で生成されるSQLとbind params両方を管理出来るようにした、という事のようです。多分。

その為、Arel側でも諸々修正が行われています。このあたり


Fix build failures on MySQL

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbactiverecord/lib/active_record/connection_adapters/mysql2_adapter.rbの修正です。

先のActive Recordのリファクタの影響でコケてしまったテストを修正しています。


Merge pull request #29905 from kamipo/remove_duplicated_assertion

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

count + joinのテストで、同じ内容のassertionがあったのを削除しています。


Fix build failures on PG

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

先のActive Recordのリファクタの影響でコケてしまったテストを修正しています。

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

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

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


Merge pull request #29768 from janpieper/sort-enabled-extensions-in-dump

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

schema dumpにextensionsを出力する際に、sortした値を出力するよう修正しています。実行する度にdumpにdiffが出てしまう(sortしてないと、出力順が不定の為)のを避ける為。


Add task to verify a release.

Rakefiletasks/release.rbの修正です。

リリース作業で生成したgemファイルが問題無いか確認する為のverify taskを作成しています。

中身はrails newrails generate等のコマンドを実際に実行し、動作する事を確認するようになっています。


Support multiple versions in release announcement.

tasks/release.rbtasks/release_announcement_draft.erbの修正です。

複数バージョンのリリースアナウンスを同時に行えるよう、リリースアナウンス生成処理をリファクタしています。


Update release instructions in light of new tasks.

RELEASING_RAILS.mdの修正です。

先のコミットで修正した内容に合わせてReleasing Railsの説明を修正しています。


Remove dependency on from_now extension.

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

Messages::Metadata#pick_expiryメソッドでexpireする時間を取得するのにfrom_nowメソッドを使用していたのを、使用しないよう修正しています。

-              expires_in.from_now.utc.iso8601(3)
+              Time.now.utc.advance(seconds: expires_in).iso8601(3)

Durationクラスへの依存を無くす為、ですかねえ。


Let Metadata instance handle purpose coercion.

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

Messages::Metadata#initializeメソッドで引数のpurposeをStringに変換するよう修正しています。Metadataクラスの各クラスでpurposeを使用する際に、毎回Stringに変換するのを避ける為。


Merge pull request #29867 from koic/fix_a_failed_ar_test_when_using_oracle

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

quoted_table_namequoted_primary_keyを取得するテストがOracle adapterでエラーになっていたのを修正しています。

-    assert_equal ["comments"], scope.references_values
+    if current_adapter?(:OracleAdapter)
+      assert_equal ["COMMENTS"], scope.references_values
+    else
+      assert_equal ["comments"], scope.references_values
+    end

Oracle adapterではquoted_table_namequoted_primary_keyの戻り値が大文字になっている為とのこと。

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

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

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

activerecord/CHANGELOG.md


Match destroyed_by_association for has_one to has_many

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

has_one associationをdependent: destroyで削除した際に、destroyed_by_associationをtrueを設定するよう修正しています。has_many associationsと挙動を合わせる為。


Revert “Extract bind_param and bind_attribute into ActiveRecord::TestCase

各テストそれぞれで独自に行っていた、Arel::Nodes::BindParamActiveRecord::Relation::QueryAttributeの生成処理をActiveRecord::TestCaseで行うよう修正した、Extract bind_param and bind_attribute into ActiveRecord::TestCaseをrevertしています。

上記処理が必要なテストは多くなく、TestCaseクラスに含む必要は無い為、というのが理由のようです。


Merge pull request #29732 from kirs/frozen-activerecord

Active Recordの修正です。

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


Merge pull request #29869 from kamipo/make_type_map_to_private

Active Recordの修正です。

AbstractAdapter#type_mapメソッドの可視性をprivateにしています。

type_mapメソッドはconnection adapterでしか使用しておらず、publicである必要は無い為。


Merge pull request #29858 from y-yagi/use_argument_error_instead_of_own_error_class

activejob/lib/active_job/test_helper.rbactivejob/test/cases/test_helper_test.rbの修正です。

Active Jobのテスト用ヘルパーメソッド(assert_enqueued_jobs, assert_performed_jobs等)にonlyexceptオプションを同時に指定した場合にraiseするエラークラスを、独自のエラークラス(InvalidOptionsError)からArgumentErrorに修正しています。

引数エラーの場合にraiseされるエラーなので、独自エラークラスよりArgumentErrorの方が的確な為。


Merge pull request #29870 from kamipo/use_true_false_literals

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbactiverecord/lib/active_record/connection_adapters/mysql/quoting.rbの修正です。

MySQL adapterのboolean serialization処理を独自に定義していたのを、abstract adapterで定義されているserialization処理を使用するよう修正しています。

Change sqlite3 boolean serialization to use 1 and 0でabstract adapterのboolean serializationでTRUEFALSEリテラルが使われるようになったのですが、MySQLでも左記リテラルをサポートしている為、abstract adapterのserialization処理を使用するようにしています。

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

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

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


Merge pull request #29851 from printercu/patch-1

railties/lib/rails/tasks/yarn.rakeの修正です。

yarn:yarn:install task実行時に--productionオプションを指定するよう修正しています。dev dependenciesを無視する為。


Remove log directory in test postprocessing

actionview/Rakefileの修正です。

rail-ujsのテストの後処理で、logディレクトリを削除するのに、FileUtils.rm_fを使用していたのを、FileUtils.rm_rfを使用するよう修正しています。


Updates Rails upgrade guide for 4.2 to 5.0 regarding the removal of ActionView::Helpers::RecordTagHelper

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

ActionView::Helpers::RecordTagHelper moved to external gem (record_tag_helper)"の項を追加し、content_tag_fordiv_forメソッドが外部gem(record_tag_helper)になった事についての説明を追加しています。


Suppress documentation for content_tag_for and div_for since they were removed already

actionview/lib/action_view/helpers/record_tag_helper.rbのdocの修正です。

div_forcontent_tag_forメソッドに:nodoc:を指定して、API docに表示されないよう修正しています。外部gemに切り出されている為。


Fix false positive test related to wrong app root path.

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

Rails.application.config.read_encrypted_secretsfalseを指定した場合にsecretesのparse処理が行われない事を確認するテストが正しく動作しないなかったのを修正しています。

Rails.application.config.rootの指定に誤りがあり、read_encrypted_secretsの値にかかわらずsecretesのparse処理が行われない状態になってしまっていた為、Rails.application.config.rootに正しいpathを指定するようにしています。

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

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

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


Move back to @matthewd’s close io fixed rb-inotify.

Gemfileの修正です。

forkしたrb-inotifyを使用するよう修正しています。

rb-inotifyにRuby 2.2.5でエラーになってしまう問題があり(Ensure the IO always gets closed, exactly once)、少し前(Fixes FIXME: rb-inotify 0.99 has been released)まで、このforkした方のrb-inotifyを使用していました。

その後、先にあげたPRがマージされた為、リリースされたrb-inotifyが使用するようになっていたのですが、どうもPRが正しくマージされてなかったらしくまだ問題が残っている為、再度forkした方を使用するようにしたとの事です。


add metadata support to message verifier

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

ActiveSupport::MessageVerifierメタデータ(purposeexpires_atexpires_in)を扱えるよう修正しています。Add expires_at, expires_in, and purpose meta_data to messages.の続き。


Add jQuery to test vendor files

actionview/test/ujs/views/layouts/application.html.erbactionview/test/ujs/public/vendor/jquery-2.2.0.jsの修正です。

public/vendor配下にjQuery 2.2.0を丸々保持するようにしています。元々はhttp://code.jquery.com/jquery-2.2.0.jsを直接参照していたのですが、これだとネットワークが使えない環境でテストがエラーになってしまう為、ファイルをローカルに保持するようにしたとの事です。

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

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

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

activerecord/CHANGELOG.md


Fix typo s/rause/raise/

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

raiserauseにタイポしていたのを修正しています。


Don’t convert dates to strings when using prepared statements in mysql

`activerecord/lib/active_record/connection_adapters/mysql/quoting.rb

MySQLでprepared statements を使用している場合、Date、Time等の値をStringに変換しないよう修正しています。

mysql2 gemの方でDateをそのまま扱える、かつ、そちらの方が高速な為、との事です。


Merge pull request #29834 from kamipo/fix_unscoping_default_scope_with_sti_association

Active Recordの修正です。

Post.joins(:users) should not be affected by `User.current_scope`の対応の影響で、STI associationsのdefault_scopeをunscope出来なくなってしまっていたのを、再度出来るよう修正しています。


Merge pull request #29815 from posthumanism/add-except-option

activejob/lib/active_job/queue_adapters/test_adapter.rbactivejob/lib/active_job/test_helper.rbの修正です。

Active Jobのテスト用ヘルパーメソッド(assert_enqueued_jobs, assert_performed_jobs等)でexceptオプションを使用出来るよう修正しています。onlyオプションの逆で、除外するJob Classを指定する為のオプションです。

perform_enqueued_jobs(except: HelloJob) do
  MyJob.perform_later(1, 2, 3) # will be performed
  HelloJob.perform_later(1, 2, 3) # will not be performed
end

assert_performed_jobs 1

Merge pull request #29785 from cswilliams/rescue_postgres_connection_errors_on_dealloc

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

DEALLOCATE処理でエラーになった場合に、何も処理をせずエラーを無視するよう修正しています。

          def dealloc(key)
             @connection.query "DEALLOCATE #{key}" if connection_active?
+          rescue PG::Error
           end

このDEALLOCATEでエラーになるのはconnectionが停止している / 切断されている時で、その状態でエラーになっても何も処理を行う必要が無い為、エラーを無視するようにしたようです。

因みに、connection_active?メソッドはconnectionが停止 / 切断 している時にtrueを返す事があるとの事です。参考:PostgreSQL adapter: reconnection problem


Merge pull request #29780 from MaxLap/fix_unscope_where_column_with_or

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

unscoped(where: [columns])を使用した場合に、誤ったbind valuesを削除してしまうケースがあったのを修正しています。

Post.where(id: 1).or(Post.where(id: 2)).where(foo: 3).unscope(where: :foo).to_sql

# before
# => SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 2 OR "posts"."id" = 3)

# after
# => SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1 OR "posts"."id" = 2)

Merge pull request #29775 from yui-knk/assign_once

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

DataStreaming#send_file_headers!メソッドで複数回行われていたcontent_typeの設定処理を、一度だけ行うようリファクタリングしています。


Fix type casting a time for MariaDB

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

Don’t convert dates to strings when using prepared statements in mysqlMySQLでDate、Time等の値をStringに変換しないよう修正してたのですが、MariaDBではまだTimeのtype castが必要そう、という事で、Timeについては再度type castするよう修正しています。


Merge pull request #29033 from kamipo/make_preload_query_to_prepared_statements

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

preload queryもprepared statementsに出来るよう修正しています。


Fix warning: circular argument reference

activejob/lib/active_job/test_helper.rbの修正です。

warning: circular argument reference - exceptのwarningが出ていたので、不要な引数の参照を削除しています。


Create rails@localhost user on travis ci

ci/travis.rbの修正です。

CIでMySQLのテストを実行する前に、rails@localhostユーザを作成、及び、rails@localhostユーザに権限を付与するようにしています。

CIでAccess deniedのエラーが出るようになった為、明示的にユーザを作成するようにしたとの事です。これ何でいきなり出るようになったんでしょうねえ。


[ci skip]Replace jquery-ujs with rails-ujs

actionview/lib/action_view/helpers/csrf_helper.rbのdocの修正です。

csrf_meta_tagsメソッドのdocにjquery-railsについての説明があったのを、rails-ujsに修正しています。


Add expires_at, expires_in, and purpose meta_data to messages.

activesupport/lib/active_support/message_encryptor.rbactivesupport/lib/active_support/messages/metadata.rbの修正です。

Message Encryptorで生成するencrypted messageにメタデータ(purposeexpires_atexpires_in)を含められるよう修正しています。