If using the this option in config/application.rb
:
config.active_record.schema_format = :sql
then when you do:
rake db:migrate
it only dumps the db/structure.sql
. I know it isn't using the db/schema.rb
since it is using the :sql
option, but how can you make rake db:migrate
generate db/schema.rb
also?
We need that because RubyMine 4.5 and IntelliJ IDea 11 use db/schema.rb
for autocompletion of columns.
To generate/update db/schema.rb
even if using the :sql
option, you can put this in your Rakefile
:
Rake::Task["db:migrate"].enhance do
if ActiveRecord::Base.schema_format == :sql
Rake::Task["db:schema:dump"].invoke
end
end
That should be fine for IDea and RubyMine.
For others that just want the file for reference, you might want to rename it to something else like db/schema.rb.backup
so it won't be confusing. To do that:
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
(Note: Using ../
in paths in Rakefile
because __FILE__
evaluates to a path that ends in /Rakefile
.)
来源:https://stackoverflow.com/questions/13646840/how-to-make-rake-dbmigrate-generate-schema-rb-when-using-sql-schema-format