1

我正在寻找一个自动更新架构的命令,而无需编写迁移文件。

例如,当我通过一些配置启动 Java Hibernate 应用程序时,数据库模式会自动构建和更新。

4

2 回答 2

1

据我所知,这对于 ActiveRecord 是不可能的,但如果您不介意更改 ORM,您可以查看DataMapper

使用 DM,您可以在模型代码本身中定义模型的“属性”(属性),然后您可以简单地运行 rake db:automigrate 来更新数据库的模式,例如

class Blog
  property :title,    String
  property :body,     Text
  property :user_id,  Integer, :required => true
end
于 2012-08-11T16:04:19.620 回答
1

使用续集,您可以

一个示例(使用 sqlite,但与其他适配器相同)

首先正常启动:

require "sequel"
DB = Sequel.sqlite(DB_NAME)

# create an items table
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

# [....]

require "sequel"
DB = Sequel.sqlite('test.db')

# create an items table
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

稍后您可以修改表:

DB.add_column :items, :valid_from, Date

可以进行以下修改(也许还有更多):

  • 添加列
  • 添加索引
  • 创建视图
  • drop_column
  • drop_index
  • drop_table
  • drop_view
  • 重命名表
  • 重命名列
  • set_column_default
  • 设置列类型

结合rake您可以执行以下操作:

require "rake"
require "sequel"

task :connect do
  DB = Sequel.sqlite('test.db')
end

desc 'create an items table'
task :create_items => :connect do
  DB.create_table :items do
    primary_key :id
    String :name
    Float :price
  end
end

task :add_dates_to_items => :connect do
  #check if items exist is missing
  DB.add_column :items, :valid_from, Date
end

备注:迁移有助于避免模式修改的错误顺序。使用迁移,您可以定义正确的顺序。实际状态被存储,您可以降级。

于 2012-08-11T18:41:51.220 回答