2014/09/19分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- inject Rack::Lock if config.eager_load is false
- Specify dummy app's db migrate path in plugin's test_helper.rb
Merge pull request #16954 from geoffharcourt/inject-over-sum
activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
の修正です。
Enumerable#sum
メソッドで計算処理を行っていた箇所を、#inject
メソッドを使うよう修正しています。
Enumerable
にモンキーパッチを当てているライブラリがあり、そのライブラリと合わせて使うと問題が起きてしまう為、対応したとの事です。
本来ライブラリ側を直すべきでは、という話があるのですが、今回はrails側で対応したようです。
inject Rack::Lock if config.eager_load is false
railties/lib/rails/application/default_middleware_stack.rb
の修正です。
config.eager_load
がfalseの時、Rack::Lock
を使用するよう修正しています。
Rack::Lock
は全てのリクエストをmutexを管理する為のクラスで、rackの処理を同期的に行わせる際に使用するクラスです。
何でeager_load
がfalseの時にRack::Lock
が必要なのかというと、Constant autoloadingはthread-safeでは無い為、eager loadが有効になってない時は、マルチスレッドで動いてはいけない為との事です。
で、具体的に何が問題になるかというと、Capybaraを使用してajaxを使用しているページを操作した際に問題が起こる可能性があるとの事です。
ajaxを使用する際、WEBrickがパラレルに動作するのですが、test environmentsではeager_load
はデフォルトfalseになっている為、ajaxの処理のタイミングによっては、定数が読み込まれておらず、`load_missing_constant'のエラーが発生する、という問題があったようです。
そのため、load_missing_constant
を回避する為に、上記対応を行ったとの事です。……多分。大分不安なので、説明よく解らない、という方は、コミットのコメントに一通り説明が記載されているので、そちらをご参照頂ければと…。
Merge pull request #16936 from untidy-hair/plugin_test_db_migrate_path
railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb
の修正です。
pluginのtest_helper.rbにmigrate pathを追加しています。
Delegation works with reserved words passed to :to
activesupport/lib/active_support/core_ext/module/delegation.rb
の修正です。
rubyの予約後をdelegate
メソッドのto
オプションに指定した際に、正常に動作するよう修正しています。
Event = Struct.new(:case) do delegate :foo, :to => :case end Tester = Struct.new(:client) do delegate :name, :to => :client, :prefix => false def foo; 1; end end event = Event.new(Tester.new) event.foo #=> 1
個人的には少し違和感ありますが、動作としてはこちらが期待通りのようです。
Updated comment about features of fixtures
activerecord/lib/active_record/fixtures.rb
のdocの修正です。
fixturesではidの自動生成を行っている旨コメントを追加しています。
[ci skip] ActionRecord CHANGELOG docs fixes
activerecord/CHANGELOG.md
の修正です。
クォートを追加しています。