Rails 2.2の threadsafe と ConnectionPool を読んでみる#1
まず thread safe にする設定は config/environments/production.rb にある
# Enable threaded mode # config.threadsafe!
からなので,これを調べると railties/lib/initializer.rb の
def threadsafe! self.cache_classes = true self.dependency_loading = false self.action_controller.allow_concurrency = true self end
なので,actionpack/lib/action_controller/base.rb を見ると
@@allow_concurrency = false cattr_accessor :allow_concurrency
とあるだけ.ならばと rak 'allow_concurrency' とかやってみると
activerecord/test/cases/pooled_connections_test.rb 79| def test_allow_concurrency_is_deprecated 80| assert_deprecated('ActiveRecord::Base.allow_concurrency') do 81| ActiveRecord::Base.allow_concurrency 83| assert_deprecated('ActiveRecord::Base.allow_concurrency=') do 84| ActiveRecord::Base.allow_concurrency = true activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb 181| # * <tt>:allow_concurrency</tt> - If true, use async query methods so Ruby threads don't deadlock; otherwise, use blocking query methods. 935| @async = @config[:allow_concurrency] && @connection.respond_to?(:async_exec) activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb 90| def allow_concurrency 91| ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_concurrency has been deprecated and no longer has any effect. Please remove all references to allow_concurrency.") 95| def allow_concurrency=(flag) 96| ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_concurrency= has been deprecated and no longer has any effect. Please remove all references to allow_concurrency=.") activerecord/lib/active_record/test_case.rb 48| setup :connection_allow_concurrency_setup 49| teardown :connection_allow_concurrency_teardown 52| def connection_allow_concurrency_setup 54| ActiveRecord::Base.establish_connection(@connection.merge({:allow_concurrency => true})) 57| def connection_allow_concurrency_teardown actionpack/lib/action_controller/dispatcher.rb 116| if ActionController::Base.allow_concurrency actionpack/lib/action_controller/base.rb 290| @@allow_concurrency = false 291| cattr_accessor :allow_concurrency railties/doc/guides/source/2_2_release_notes.txt 408|* +ActiveRecord::Base.allow_concurrency+ no longer has any effect. railties/doc/guides/html/2_2_release_notes.html 1098|<tt>ActiveRecord::Base.allow_concurrency</tt> no longer has any effect. railties/lib/webrick_server.rb 43|# can change this behavior by setting ActionController::Base.allow_concurrency railties/lib/initializer.rb 790| self.action_controller.allow_concurrency = true
と言うことは,
- actionpack/lib/action_controller/dispatcher.rb
- activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
このあたりが怪しいので,次はここを見てみよう.続くかも.