2017-03-26 24 views
0

既存のmySQLデータベースを使用してrailsインスタンスを作成しようとしていますが、this guideに従っています。Rake:既存のmySQLデータベースでデータベース移行が失敗する

手順1〜3は機能しましたが、レールサーバーを実行しているときに、保留中の移行があると表示されます。

誰かがエラーの原因を教えてくれたり、既存のmySQLデータベースとレールアプリを統合する方法に関する一般的な指針を教えてくれれば非常に感謝します。すくいデシベル実行

:ここでは利回りにこのエラーを移行

== 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であり、/ 001_create_database.rb

schema.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 

乾杯

答えて

0

あなたのMySQLデータベースには "schema_migrations"テーブルがありますか? Railsは、このテーブルを使用して、データベースおよびschema.rbファイルのバージョン番号に基づいて保留中の移行があるかどうかを判断します。 schema.rbファイルを更新して、バージョンが標準フォーマット(「0」ではなく「20170326120700」)になっていることを確認し、「version」というフィールドを持つ「schema_migrations」テーブルを作成し、新しいテーブルにバージョン番号「20170326120700」を挿入します。 Railsは保留中の移行について不平を言ってはいけません。 "version"フィールドはVARCHAR(255)型でなければなりません。

schema.rbをデータベースと同期させるには、チュートリアル「rake db:schema:dump」のようにschema.rbを再作成するプロセスに従います。あなたのバージョンがschema.rbファイルと "schema_migrations"テーブルで一致していることを確認してください。

+0

助けてくれてありがとう!私はこれを試して、残念ながらそれは動作しませんでした。問題の診断に役立つオリジナルの投稿には含まれていないものはありますか? – jfwerbes

+0

「移行の保留中」のエラーはなくなりましたか? – tronmcp

関連する問題