【问题标题】:How to make rake db:migrate generate schema.rb when using :sql schema format使用 :sql 模式格式时如何使 rake db:migrate 生成 schema.rb
【发布时间】:2012-11-18 18:28:12
【问题描述】:

如果在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 11 使用 db/schema.rb 来自动完成列。

【问题讨论】:

    标签: ruby ruby-on-rails-3 rake dbmigrate schema.rb


    【解决方案1】:

    要生成/更新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 结尾的路径。)

    【讨论】:

    • 感谢完美。我需要做的唯一改变是重命名的文件,因为我有时使用scaffold(这个搜索模式带有正则表达式 //schema[^/]*.rb$ )。我改File.rename(File.expand_path('../db/schema.rb', __FILE__), File.expand_path('../db/schema.backup.rb', __FILE__))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多