2009-04-02 9 views
1

Ich versuche Rails zu lernen, indem ich mit verschiedenen Paketen (ActiveRecord, ActiveSupport) ohne Rails gem. Arbeite.Wie funktioniert die Versionierung im Migrator von ActiveRecord?

Ich kann jedoch nicht herausfinden, wie man eine Datenbank mit drei Klassen erstellt. Hier ist mein Rakefile:

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 

Und ich habe drei Dateien:

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

, die ich alle in der Vergangenheit erfolgreich laufen, jeder erbt nur von Active :: Migration und tut self.up/Selbst.down.

Ich habe jedoch, Problem, dass, wenn ich Rake laufen, gibt es "Mehrere Migrationen haben die Versionsnummer 1". Sollte ich alle Migrationen in eine Datei packen, wie zum Beispiel 001_create_database.rb?

Gibt es irgendwo ein Handbuch, das beschreibt, wie diese Versionen funktionieren?

Ich versuchte Quellcode von migrator.rb zu lesen, konnte aber nicht finden, wo sich up_without_benchmarks/down_without_benchmarks befand.

Antwort

3

Rechts. Migrationen müssen mit eindeutigen Nummern beginnen, damit sie ausgeführt werden können. Standardmäßig ist diese Nummer in Rails 2.x eine Darstellung des aktuellen Datums und der aktuellen Uhrzeit.

Der Grund dafür ist, dass Entwickler Migrationen einfach ausführen und rückgängig machen können. Zeitstempel werden anstelle von sequentiellen Ganzzahlen verwendet, falls zwei Entwickler gleichzeitig eine neue Migration erstellen (was dazu führen würde, dass sie dieselbe Nummer haben, wenn sie an ein Versionskontrollsystem übergeben werden).

Verwandte Themen