在rails中,您可以设置一个rails应用程序,分配正确的数据库驱动程序(我需要firebird / fb)然后执行rake db:schema:转储几乎开箱即用。
我正在尝试为我的数据库架构进行版本控制。我怎样才能制作一个需要activerecord和fb库的ruby脚本并实现相同的功能。我不需要整个rails应用程序。我想要的只是一个提取模式的一致脚本。
答案 0 :(得分:8)
查看the source of the db:schema:dump
task,以下代码可以帮助您入门:
require 'active_record'
require 'active_record/schema_dumper'
require 'activerecord-fb-adapter'
filename = './schema.rb'
ActiveRecord::Base.establish_connection(
adapter: 'fb',
database: 'db/development.fdb',
username: 'SYSDBA',
password: 'masterkey',
host: 'localhost',
encoding: 'UTF-8',
create: true
)
File.open(filename, "w:utf-8") do |file|
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
答案 1 :(得分:0)
我恰好在firebird / fb部分以外的地方工作过。
require "yaml"
require "active_record"
include ActiveRecord
include ActiveRecord::Tasks
ActiveRecord::Migrator.migrations_path='./db/migrate'
DatabaseTasks.db_dir = './db'
db_config_file = "./config/database.yml"
db_config = YAML.load_file(db_config_file)
db_type = 'development'
db_object = db_config[db_type]
@sldbtask = SQLiteDatabaseTasks.new(db_object, './')
unless File.exist?(db_object['database'])
@sldbtask.create
@sldbtask.connection
# try different migation versions
migration_version = 0
ActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_path, migration_version)
end
unless File.exist?('./db/schema.rb')
#DatabaseTasks.check_schema_file('./db/schema.rb')
File.open('./db/schema.rb', "w:utf-8") do |file|
@sldbtask.establish_connection(db_object)
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
end

当然我的适配器不同但它可以修改,并且它具有Rails应用程序的多功能性,因此您可以将代码部分放入根目录。但是当然你可以为此耙,但这只是表明它有效。但是,Tou可能会给迁移版本带来问题。我还没有彻底测试过它。