2012-11-30 7 views
6

Wenn in config/application.rb die Verwendung dieser Option:Wie rake db machen: wandern schema.rb erzeugen bei der Verwendung von SQL Schema-Format

config.active_record.schema_format = :sql 

dann, wenn Sie tun:

rake db:migrate 

es nur Dumps die db/structure.sql. Ich weiß, dass es nicht die db/schema.rb verwendet, da es die :sql Option verwendet, aber wie können Sie rake db:migrate erzeugen db/schema.rb auch machen?

Wir brauchen das, weil RubyMine 4.5 und IntelliJ IDea 11 db/schema.rb für die automatische Vervollständigung von Spalten verwenden.

Antwort

8

/update db/schema.rb selbst zu erzeugen, wenn die :sql Option verwenden, können Sie dies in Ihrem Rakefile setzen:

Rake::Task["db:migrate"].enhance do 
    if ActiveRecord::Base.schema_format == :sql 
    Rake::Task["db:schema:dump"].invoke 
    end 
end 

Das ist für Idee und RubyMine sollte in Ordnung sein.

Für andere, die nur die Datei als Referenz verwenden möchten, möchten Sie sie möglicherweise in etwas anderes wie db/schema.rb.backup umbenennen, so dass es nicht verwirrend sein wird. Um dies zu tun:

Rake::Task["db:migrate"].enhance do 
    if ActiveRecord::Base.schema_format == :sql 
    Rake::Task["db:schema:dump"].invoke 
    File.rename(File.expand_path('../db/schema.rb', __FILE__), File.expand_path('../db/schema.rb.backup', __FILE__)) 
    end 
end 

(Hinweis: Die Verwendung ../ in Pfaden in Rakefile weil __FILE__ auf einen Pfad auswertet, die in /Rakefile endet.)

+0

thx Arbeit perfekt. Einzige Änderung, die ich tun muss, ist die umbenannte Datei, weil ich manchmal 'scaffold' (dieses Suchschema mit der regexp //schema[^/]*.rb$) verwende. Ich ändere 'File.rename (File.expand_path ('../ db/schema.rb', __FILE__), File.expand_path ('../ db/schema.backup.rb', __FILE __))' – inye