如何使用rake db:migrate生成schema.rb时使用:sql架构格式
如果在config/application.rb
使用此选项:
config.active_record.schema_format = :sql
然后你做的时候:
rake db:migrate
它只转储db/structure.sql
。 我知道它不使用db/schema.rb
因为它使用的是:sql
选项,但是如何使用rake db:migrate
generate db/schema.rb
呢?
我们需要它,因为RubyMine 4.5和IntelliJ IDea 11使用db/schema.rb
来自动完成列。
要生成/更新db/schema.rb
即使使用:sql
选项,也可以将其放在Rakefile
:
Rake::Task["db:migrate"].enhance do if ActiveRecord::Base.schema_format == :sql Rake::Task["db:schema:dump"].invoke end end
这应该适用于IDea和RubyMine。
对于其他只想要文件以供参考的人,您可能希望将其重命名为db/schema.rb.backup
类的其他内容,这样就不会让人感到困惑。 要做到这一点:
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
(注意:在Rakefile
中的路径中使用../
,因为__FILE__
计算结果为/Rakefile
结尾的路径。)