1

每次运行rake db:migrate它都会生成一个无用的文件,因为我的视图被错误地转储db/schema.rb,所以无法加载该文件。rake db:schema:load

我注意到转储带有我的视图和同名的表。由于表名已经存在,这会导致引发错误。

我目前使用的是 rails 4.2.11,我的 gemfile 中的 Scenic 版本是 1.4.1。

这是我的一些表和一个使用它们的视图,我尝试foo_bar手动删除表的所有定义(视图的相同名称),然后rake db:schema:load工作。但是下一次我跑了db:migration那些没用的桌子又会来。


ActiveRecord::Schema.define(version: 2) do

  create_table "foo_bar", id: false, force: :cascade do |t|
    t.integer  "id",                  limit: 4,                           default: 0,    null: false
    t.string   "uuid",                limit: 36
    t.decimal  "quantity",                       precision: 20, scale: 4, default: 0.0
    t.integer  "bar_id", limit: 4,                           default: 0
    t.decimal  "price",               precision: 20, scale: 4,  default: 0.0
  end

  create_table "foo", force: :cascade do |t|
    t.string   "uuid",            limit: 36
    t.decimal  "quantity",        precision: 20, scale: 4, default: 0.0
  end

  create_table "bar", force: :cascade do |t|
    t.decimal  "price",               precision: 20, scale: 4,  default: 0.0
    t.integer  "foo_id",            limit: 4
    t.decimal  "quantity",            precision: 20, scale: 4,  default: 0.0
  end

  add_index "bar", ["foo_id"], name: "index_bars_on_foo_id", using: :btree

  add_foreign_key "bar", "foo"

  create_view "foo_bar",  sql_definition: <<-SQL
      select `s`.`id` AS `id`,`s`.`uuid` AS `uuid`,`s`.`quantity` AS `quantity`,`t`.`id` AS `bar_id`,`t`.`price` AS `price` from (`foo` `s` left join `bar` `t` on(((`t`.`foo_id` = `s`.`id`))))
  SQL

end

我的数据库比这大得多,现在每次我需要启动一个新应用程序时,我都必须从头开始运行所有迁移,这需要很多时间,而且schema:load不需要

4

0 回答 0