なるようになるブログ

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

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)を含められるよう修正しています。