diff options
author | kennyj <kennyj@gmail.com> | 2012-03-01 01:19:27 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-03-01 01:19:27 +0900 |
commit | 5cbba30a1292dde9c83ab42287c2a1f38f3fcc44 (patch) | |
tree | a016ec1cf6dd9d90e449b8be7a06b6fdd70ee5cb /activerecord/lib/active_record | |
parent | 0da12df2608969330bd47c543866f79ff8ca9edd (diff) | |
download | rails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.tar.gz rails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.tar.bz2 rails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.zip |
Support judgement expired schema cache dump.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/schema_cache.rb | 9 | ||||
-rw-r--r-- | activerecord/lib/active_record/railtie.rb | 6 |
2 files changed, 11 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb index 53fa404305..aad1f9a7ef 100644 --- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb @@ -1,7 +1,7 @@ module ActiveRecord module ConnectionAdapters class SchemaCache - attr_reader :columns, :columns_hash, :primary_keys, :tables + attr_reader :columns, :columns_hash, :primary_keys, :tables, :version attr_accessor :connection def initialize(conn) @@ -36,6 +36,7 @@ module ActiveRecord @columns_hash.clear @primary_keys.clear @tables.clear + @version = nil end # Clear out internal caches for table with +table_name+. @@ -47,13 +48,15 @@ module ActiveRecord end def marshal_dump - [:@columns, :@columns_hash, :@primary_keys, :@tables].map do |val| + # if we get current version during initialization, it happens stack over flow. + @version = ActiveRecord::Migrator.current_version + [@version] + [:@columns, :@columns_hash, :@primary_keys, :@tables].map do |val| self.instance_variable_get(val).inject({}) { |h, v| h[v[0]] = v[1]; h } end end def marshal_load(array) - @columns, @columns_hash, @primary_keys, @tables = array + @version, @columns, @columns_hash, @primary_keys, @tables = array prepare_default_proc end diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb index c287356a7b..516c450f85 100644 --- a/activerecord/lib/active_record/railtie.rb +++ b/activerecord/lib/active_record/railtie.rb @@ -121,7 +121,11 @@ module ActiveRecord filename = File.join(app.config.paths["db"].first, "schema_cache.dump") if File.file?(filename) cache = Marshal.load(open(filename, 'rb') { |f| f.read }) - ActiveRecord::Base.connection.schema_cache = cache + if cache.version == ActiveRecord::Migrator.current_version + ActiveRecord::Base.connection.schema_cache = cache + else + warn "schema_cache.dump is expired. Current version is #{ActiveRecord::Migrator.current_version}, but cache version is #{cache.version}." + end end end end |