2016/04/23分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Add
ActiveSupport.to_time_preserves_timezoneconfig option to control howto_timehandles timezones. In Ruby 2.4+ the behavior will change from converting to the local system timezone to preserving the timezone of the receiver. - Add
DateTime#localtimeto return an instance ofTimein the system's local timezone. Also aliased togetlocal
activesupport/lib/active_support/evented_file_update_checker.rbの修正です。
pathの階層チェック処理をするのに、refineを使用してPathnameにメソッドを定義していたのを止めて、普通にActiveSupport::EventedFileUpdateCheckerクラス内に同じ内容のメソッドを定義するよう修正しています。
そちらの方が早い為、との事です。refinement遅いんですかねえ。
Do not attempt to return connection with open transaction to pool (#24610)
activerecord/lib/active_record/query_cache.rbの修正です。
install_executor_hooksメソッドで、transaction中じゃない場合のみ、connectionのclear処理を行うよう修正しています。
- ActiveRecord::Base.clear_active_connections! + unless ActiveRecord::Base.connection.transaction_open? + ActiveRecord::Base.clear_active_connections! + end
transaction中にconnectionのclear処理を行おうとすると、デットロックになってしまう問題があった為。
Active Recordの修正です。
INSERT INTO schema_migrations in 1 SQLで、schema_migrations のinsert処理で、insert 1行毎にSQLを発行していたのを、multi-row-insertを使用するよう修正したのですが、古いSQLite(3.7.10以下)ではmulti insertは使用出来ないので、SQLiteのバージョンをチェックし、3.7.10以下の場合は元の通りinsert 1行毎にSQLを発行するよう修正しています。
railties/test/application/configuration_test.rbの修正です。
テスト名でoverriddenをoverridenにタイポしている箇所があったのを修正しています。
Schema load: Fix dupe version insert
activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rbの修正です。
assume_migrated_upto_versionメソッドで、version sqlをinsertする際に使用する変数を誤っていたのを修正しています。
Actionpack documentation typos [ci skip]
Action Packのdocの修正です。
各doc内のグラマーの修正をまとめて行っています。
Add compatibility for Ruby 2.4 to_time changes
Active Support / railtiesの修正です。
元々DateTime#to_time、Time#to_timeメソッドは、timezoneの情報を削除した値を返すようになっていたのですが、Ruby 2.4からtimezoneの情報を保持するようになりました。
これによりRailsの既存の処理が壊れてしまった(timezone情報を保持しない前提の処理になっていた為)箇所がある為、#to_timeメソッドを上書きして、timezoneの情報を保持した値を返すかどうかをRails側でハンドリングするよう修正しています。
デフォルトではtimezoneの情報を保持しないようになっていますが、ActiveSupport.to_time_preserves_timezoneにtrueを設定する事で、timezoneの情報を保持した値を返すようになります(Rails 5でrails newした場合は、デフォルトtrueになるよう設定されています)。
ENV['TZ'] = 'US/Eastern' "2016-04-23T10:23:12.000Z".to_time # => "2016-04-23T06:23:12.000-04:00" ActiveSupport.to_time_preserves_timezone = true "2016-04-23T10:23:12.000Z".to_time # => "2016-04-23T10:23:12.000Z"
また、合わせてシステムのローカルタイムゾーンが設定されたTimeクラスのインスタンスを返す、DateTime#localtimeメソッド、及びそのaliasであるDateTime#getlocalメソッドが追加されています。
DateTime.new(2016, 3, 11, 15, 11, 12, 0).getlocal # => 2016-03-12 00:11:12 +0900
参考:
- Bug #12189: DateTime#to_time removes timezone information - Ruby trunk - Ruby Issue Tracking System
- Bug #12271:
Time#to_timeremoves timezone information - Ruby trunk - Ruby Issue Tracking System
Move DateTime#getlocal to /core_ext/date_time/calculations.rb
activesupport/lib/active_support/core_ext/date_time/calculations.rb、
activesupport/lib/active_support/core_ext/date_time/compatibility.rbの修正です。
先の対応で追加されたDateTime#getlocalメソッドをactive_support/core_ext/date_time/compatibility.rbからactive_support/core_ext/date_time/calculations.rbに移動しています。
DateTime#getlocalメソッドはpublic APIな為、DateTime#utcメソッド同様calculations.rbにあるのが適切だろう、という事で移動したようです。