1

移行ファイルを書き込まなくても、スキーマを自動的に更新するコマンドを探しています。

たとえば、Java Hibernate アプリを起動すると、何らかの構成で DB スキーマが自動的に構築および更新されます。

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

Sequelでできること

例(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

次の変更が可能です (おそらくもっとあります):

  • add_column
  • add_index
  • create_view
  • drop_column
  • drop_index
  • テーブルをドロップ
  • ドロップビュー
  • rename_table
  • rename_column
  • set_column_default
  • set_column_type

あなたと組み合わせて、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 に答える