なるようになるブログ

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

rails commit log流し読み(2014/09/19)

2014/09/19分のコミットです。

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

railties/CHANGELOG.md

activesupport/CHANGELOG.md


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の修正です。

クォートを追加しています。