aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorkennyj <kennyj@gmail.com>2012-03-01 01:19:27 +0900
committerkennyj <kennyj@gmail.com>2012-03-01 01:19:27 +0900
commit5cbba30a1292dde9c83ab42287c2a1f38f3fcc44 (patch)
treea016ec1cf6dd9d90e449b8be7a06b6fdd70ee5cb /activerecord
parent0da12df2608969330bd47c543866f79ff8ca9edd (diff)
downloadrails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.tar.gz
rails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.tar.bz2
rails-5cbba30a1292dde9c83ab42287c2a1f38f3fcc44.zip
Support judgement expired schema cache dump.
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/connection_adapters/schema_cache.rb9
-rw-r--r--activerecord/lib/active_record/railtie.rb6
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