2009-04-02 11 views
1

私はレールの宝石なしで別のパッケージ(ActiveRecord、ActiveSupport)で作業することによってRailsを学ぼうとしています。ActiveRecordの移行プログラムのバージョン管理はどのように機能しますか?

私は3つのクラスを持つデータベースを作成する方法を考え出すことはできません。

require 'rubygems' 
require 'activerecord' 
require 'yaml' 

task :default => :migrate 

desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x" 
task :migrate => :environment do 
    ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil) 
end 

task :environment do 
    ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml'))) 
    ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a')) 
end 

そして、私は三つのファイルがあります: はここに私のrakefileだ私は過去に正常に実行されてい

001_create_appearances.rb 001_create_movies.rb 001_create_actors.rb 

を、それぞれがちょうど/ ActiveRecordは::移行から継承し、するself.upを行います自己ダウン。

ただし、rakeを実行すると「複数の移行でバージョン番号1が返されます」という問題があります。すべての移行を001_create_database.rbのような1つのファイルにパックする必要がありますか?

これらのバージョンの仕組みを説明するマニュアルがありますか?

migrator.rbのソースを読み込もうとしましたが、どこにup_without_benchmarks/down_without_benchmarksがあるのか​​わかりませんでした。

答えて

3

右。移行は、実行するために一意の番号で始まる必要があります。デフォルトでは、この数字は現在の日付と時刻を表します。

これは、開発者が簡単に移行を実行したり元に戻したりできるようにするためです。 2人の開発者が同時に新しいマイグレーションを作成する場合(バージョン管理システムにプッシュされたときに同じ数になる)、シーケンシャルな整数の代わりにタイムスタンプが使用されます。

関連する問題