移行ファイルを書き込まなくても、スキーマを自動的に更新するコマンドを探しています。
たとえば、Java Hibernate アプリを起動すると、何らかの構成で DB スキーマが自動的に構築および更新されます。
移行ファイルを書き込まなくても、スキーマを自動的に更新するコマンドを探しています。
たとえば、Java Hibernate アプリを起動すると、何らかの構成で DB スキーマが自動的に構築および更新されます。
私の知る限り、これはActiveRecordでは不可能ですが、ORMを変更してもかまわない場合は、代わりにDataMapperを調べることができます。
DMを使用すると、モデルコード自体でモデルの「プロパティ」(属性)を定義し、次にrake db:automigrateを実行して、データベースのスキーマを更新できます。
class Blog
property :title, String
property :body, Text
property :user_id, Integer, :required => true
end
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
次の変更が可能です (おそらくもっとあります):
あなたと組み合わせて、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
注意: 移行は、スキーマ変更の間違った順序を回避するのに役立ちます。移行を使用すると、正しい順序を定義できます。実際のステータスが保存され、ダウングレードできます。