diff options
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 |