gpt4 book ai didi

mysql - Rake:数据库迁移因预先存在的 mySQL 数据库而失败

转载 作者:行者123 更新时间:2023-11-29 19:11:40 25 4
gpt4 key购买 nike

我正在尝试使用预先存在的 mySQL 数据库创建一个 Rails 实例,并且我正在关注 this guide .

步骤 1-3 有效,但在运行 Rails 服务器时,它显示有待处理的迁移。

如果有人能告诉我错误的根源或提供一些有关如何将预先存在的 mySQL 数据库与 Rails 应用程序集成的一般指导,我将非常感激。

运行 rake db:migrate 会产生此错误

== 1 CreateDatabase: migrating ================================================
-- create_table("Bill", {:primary_key=>"confirmationNo", :id=>:integer, :force=>:cascade, :options=>"ENGINE=InnoDB DEFAULT CHARSET=latin1"})
-> 0.0556s
-- create_table("Customer", {:primary_key=>"creditCardNo", :id=>:integer, :force=>:cascade, :options=>"ENGINE=InnoDB DEFAULT CHARSET=latin1"})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails: DROP TABLE `Customer` CASCADE

这是我的 schema.rb 和 migrate/001_create_database.rb

架构.rb

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

create_table "Bill", primary_key: "confirmationNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "pointsEarned", null: false
t.float "amountDue", limit: 24, null: false
end

create_table "Customer", primary_key: "creditCardNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "guestID", null: false
t.string "username", limit: 30
t.string "name", limit: 30, null: false
t.index ["guestID", "username"], name: "guestID", unique: true, using: :btree
t.index ["username"], name: "username", using: :btree
end

create_table "Manager", primary_key: "managerID", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name", limit: 10, null: false
end

create_table "Reservation", primary_key: "confirmationNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.date "inDate"
t.date "outDate"
t.boolean "availability", null: false
t.integer "roomNo"
t.integer "creditCardNo"
t.index ["creditCardNo"], name: "creditCardNo", using: :btree
t.index ["inDate", "outDate"], name: "inDate", using: :btree
t.index ["roomNo"], name: "roomNo", using: :btree
end

create_table "Room", primary_key: "roomNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "roomType", limit: 30, null: false
t.index ["roomType"], name: "roomType", using: :btree
end

create_table "Roomtype", primary_key: "roomType", id: :string, limit: 30, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "capacity", null: false
t.float "rate", limit: 24, null: false
end

create_table "Stay", primary_key: ["inDate", "outDate"], force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.date "inDate", null: false
t.date "outDate", null: false
end

create_table "User", primary_key: "username", id: :string, limit: 1, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "points", null: false
end

add_foreign_key "Bill", "Reservation", column: "confirmationNo", primary_key: "confirmationNo", name: "Bill_ibfk_1"
add_foreign_key "Customer", "User", column: "username", primary_key: "username", name: "Customer_ibfk_1"
add_foreign_key "Reservation", "Customer", column: "creditCardNo", primary_key: "creditCardNo", name: "Reservation_ibfk_3"
add_foreign_key "Reservation", "Room", column: "roomNo", primary_key: "roomNo", name: "Reservation_ibfk_1"
add_foreign_key "Reservation", "Stay", column: "inDate", primary_key: "inDate", name: "Reservation_ibfk_2", on_delete: :cascade
add_foreign_key "Reservation", "Stay", column: "outDate", primary_key: "outDate", name: "Reservation_ibfk_2", on_delete: :cascade
add_foreign_key "Room", "Roomtype", column: "roomType", primary_key: "roomType", name: "Room_ibfk_1"
end

迁移/001_create_database.rb

class CreateDatabase < ActiveRecord::Migration
def self.up

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

create_table "Bill", primary_key: "confirmationNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "pointsEarned", null: false
t.float "amountDue", limit: 24, null: false
end

create_table "Customer", primary_key: "creditCardNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "guestID", null: false
t.string "username", limit: 30
t.string "name", limit: 30, null: false
t.index ["guestID", "username"], name: "guestID", unique: true, using: :btree
t.index ["username"], name: "username", using: :btree
end

create_table "Manager", primary_key: "managerID", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name", limit: 10, null: false
end

create_table "Reservation", primary_key: "confirmationNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.date "inDate"
t.date "outDate"
t.boolean "availability", null: false
t.integer "roomNo"
t.integer "creditCardNo"
t.index ["creditCardNo"], name: "creditCardNo", using: :btree
t.index ["inDate", "outDate"], name: "inDate", using: :btree
t.index ["roomNo"], name: "roomNo", using: :btree
end

create_table "Room", primary_key: "roomNo", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "roomType", limit: 30, null: false
t.index ["roomType"], name: "roomType", using: :btree
end

create_table "Roomtype", primary_key: "roomType", id: :string, limit: 30, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "capacity", null: false
t.float "rate", limit: 24, null: false
end

create_table "Stay", primary_key: ["inDate", "outDate"], force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.date "inDate", null: false
t.date "outDate", null: false
end

create_table "User", primary_key: "username", id: :string, limit: 1, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "points", null: false
end

add_foreign_key "Bill", "Reservation", column: "confirmationNo", primary_key: "confirmationNo", name: "Bill_ibfk_1"
add_foreign_key "Customer", "User", column: "username", primary_key: "username", name: "Customer_ibfk_1"
add_foreign_key "Reservation", "Customer", column: "creditCardNo", primary_key: "creditCardNo", name: "Reservation_ibfk_3"
add_foreign_key "Reservation", "Room", column: "roomNo", primary_key: "roomNo", name: "Reservation_ibfk_1"
add_foreign_key "Reservation", "Stay", column: "inDate", primary_key: "inDate", name: "Reservation_ibfk_2", on_delete: :cascade
add_foreign_key "Reservation", "Stay", column: "outDate", primary_key: "outDate", name: "Reservation_ibfk_2", on_delete: :cascade
add_foreign_key "Room", "Roomtype", column: "roomType", primary_key: "roomType", name: "Room_ibfk_1"
end

end

def self.down
# drop all the tables if you really need
# to support migration back to version 0
end
end

干杯

最佳答案

您的 MySQL 数据库是否有“schema_migrations”表? Rails 依赖此表根据数据库和 schema.rb 文件中的版本号来决定是否有任何待处理的迁移。更新 schema.rb 文件,使版本采用标准格式:“20170326120700”而不是“0”,然后创建一个包含名为“version”字段的表“schema_migrations”,并将版本号“20170326120700”插入新表中。 Rails 应该停止提示未决的迁移。 “版本”字段应为 VARCHAR(255) 类型。

要使 schema.rb 再次与数据库同步,您可以按照教程“rake db:schema:dump”中的过程重新创建 schema.rb。验证您的版本在 schema.rb 文件和“schema_migrations”表中仍然匹配。

关于mysql - Rake:数据库迁移因预先存在的 mySQL 数据库而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43031463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com