没有rails的ActiveRecord Schema Dump

时间:2014-08-15 15:19:35

标签: ruby firebird

在rails中,您可以设置一个rails应用程序,分配正确的数据库驱动程序(我需要firebird / fb)然后执行rake db:schema:转储几乎开箱即用。

我正在尝试为我的数据库架构进行版本控制。我怎样才能制作一个需要activerecord和fb库的ruby脚本并实现相同的功能。我不需要整个rails应用程序。我想要的只是一个提取模式的一致脚本。

2 个答案:

答案 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可能会给迁移版本带来问题。我还没有彻底测试过它。