我想用Marshal将Sqlite内存数据库转储到磁盘上,但出现下面的错误,这里是完整的测试。用于保存内存数据库的Sqlite API似乎仅在C语言中可用。
require 'sqlite3'
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => ":memory:"
)
ActiveRecord::Schema.define do
create_table :tests do |table|
table.column :word, :string
end
end
class Test < ActiveRecord::Base;end
Test.create(word: 'test')
puts Test.all.length
c = ::ActiveRecord::Base.connection
File.open('sqlite_db.marshal','wb') { |f| f.write(Marshal.dump(c)) }
# => error `dump': can't dump hash with default proc (TypeError)
您可以使用sqlite3的Backup类。
# populate ActiveRecord here...
sdb = ::ActiveRecord::Base.connection.raw_connection
ddb = SQLite3::Database.new('backup.sqlite3')
b = SQLite3::Backup.new(ddb, 'main', sdb, 'main')
b.step(-1)
b.finish
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句