10

如果在中使用此选项config/application.rb

config.active_record.schema_format = :sql

那么当你这样做时:

rake db:migrate

它只会转储db/structure.sql. 我知道它没有使用,db/schema.rb因为它正在使用该:sql选项,但是你怎么能rake db:migrate生成生成db/schema.rb呢?

我们需要它,因为 RubyMine 4.5 和 IntelliJ IDea 11db/schema.rb用于自动完成列。

4

1 回答 1

10

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。)

于 2012-11-30T14:08:33.173 回答