每次运行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
不需要