ฉันต้องการลบ / ลบไฟล์การย้ายข้อมูล ฉันจะทำอย่างนั้นได้อย่างไร? ฉันรู้ว่ามีคำถามคล้าย ๆ กันที่นี่ แต่เป็นการอัปเดตมีวิธีที่ดีกว่าการทำสคริปต์ / ทำลายหรือไม่?
นอกจากนี้ฉันควรทำdb:reset
หรือdb:drop
ถ้าฉันลบ / ลบการย้ายข้อมูล?
ฉันต้องการลบ / ลบไฟล์การย้ายข้อมูล ฉันจะทำอย่างนั้นได้อย่างไร? ฉันรู้ว่ามีคำถามคล้าย ๆ กันที่นี่ แต่เป็นการอัปเดตมีวิธีที่ดีกว่าการทำสคริปต์ / ทำลายหรือไม่?
นอกจากนี้ฉันควรทำdb:reset
หรือdb:drop
ถ้าฉันลบ / ลบการย้ายข้อมูล?
คำตอบ:
ฉันมัก:
rake db:migrate VERSION=XXX
กับสภาพแวดล้อมทั้งหมดเป็นเวอร์ชันก่อนที่ฉันต้องการลบrake db:migrate
อีกครั้งหากแอปพลิเคชันของคุณอยู่ในการผลิตหรือการจัดเตรียมการเขียนการย้ายข้อมูลอื่นที่ทำลายตารางหรือคอลัมน์ของคุณจะปลอดภัยกว่า
ข้อมูลอ้างอิงที่ดีอีกประการหนึ่งสำหรับการย้ายข้อมูลคือhttp://guides.rubyonrails.org/migrations.html
self.down
วิธีการที่กำหนดไว้ในการย้ายข้อมูลของคุณเพื่อ "ปรับลดรุ่น" ฐานข้อมูลของคุณ
rake db:migrate:status
จะแสดง ID ของไฟล์ที่หายไปซึ่งคุณสามารถใช้เพื่อสร้างไฟล์ใหม่ได้ เมื่อกลับมาแล้วคุณสามารถทำตามคำแนะนำของคำตอบนี้เพื่อชัยชนะ
db:migrate:status
เป็นการช่วยชีวิต!
อีกวิธีในการลบการย้าย:
$ rails d migration SameMigrationNameAsUsedToGenerate
ใช้ก่อนที่rake db:migrate
จะดำเนินการเนื่องจากการเปลี่ยนแปลงในฐานข้อมูลจะคงอยู่ตลอดไป :) - หรือลบการเปลี่ยนแปลงด้วยตนเอง
เรียกใช้คำสั่งด้านล่างจากโฮมไดเร็กทอรีของแอพ:
rake db:migrate:down VERSION="20140311142212"
(เวอร์ชันที่นี่คือการประทับเวลาที่อยู่ข้างหน้ารางเมื่อสร้างการย้ายข้อมูลการดำเนินการนี้จะเปลี่ยนกลับฐานข้อมูลเนื่องจากการย้ายข้อมูลนี้)
Run "rails destroy migration migration_name"
(migration_name เป็นชื่อที่เลือกใช้ในขณะสร้างการย้ายข้อมูลโปรดลบ " timestamp_ " ออกจากชื่อไฟล์การย้ายข้อมูลของคุณเพื่อรับ)
rails d migration migration_name
คุณสามารถเรียกใช้การย้ายข้อมูลลงได้เช่นนี้:
rake db:migrate:down VERSION=versionnumber
ดูคู่มือRuby on Railsเกี่ยวกับการย้ายข้อมูลสำหรับข้อมูลเพิ่มเติม
เราสามารถใช้,
$ rails d migration table_name
ซึ่งจะลบการย้ายข้อมูล
บางครั้งฉันพบว่าตัวเองกำลังลบไฟล์การย้ายข้อมูลและลบรายการที่เกี่ยวข้องในตาราง schema_migrations ออกจากฐานข้อมูล ไม่สวย แต่ใช้งานได้
นอกจากนี้ยังใช้งานได้ใน Rails 5
หากการย้ายข้อมูลเป็นรายการล่าสุดคุณสามารถลบคอลัมน์ฐานข้อมูลที่การย้ายข้อมูลเพิ่มโดยทำ:
rake db:rollback
จากนั้นลบไฟล์การย้ายข้อมูลโดยเรียกใช้:
rails d migration WhateverYourMigrationWasNamed.rb
คำตอบเหล่านี้ไม่ตรงกับปัญหาที่ฉันพบเนื่องจากการย้ายข้อมูลที่ฉันต้องการลบหายไป: ฉันได้สร้างและเรียกใช้การย้ายข้อมูลในสาขาอื่นซึ่งถูกยกเลิกไปแล้ว ปัญหาคือเมื่อเรียกใช้การโอนย้ายทางรถไฟจะเพิ่มเวอร์ชันลงในschema_migrations
ตารางในฐานข้อมูล ดังนั้นแม้ว่าจะไม่ได้ระบุไว้ในโครงสร้างฐานข้อมูลหรือสคีมาของคุณ แต่ทางรถไฟก็มองหามัน คุณสามารถเปิดเผยการย้ายข้อมูลที่ถูกละเลยเหล่านี้ได้โดยเรียกใช้
rails db:migrate:status
สังเกตเวอร์ชันของการย้ายข้อมูลที่ขาดหายไปและเข้าไปที่คอนโซล db:
rails dbconsole
ตอนนี้ลบเวอร์ชันออกจากตารางการย้ายด้วยตนเอง:
delete from schema_migrations where version='<version>';
ตอนนี้คุณควรจะดี
ฉันเพิ่งมีปัญหาเดียวกันนี้:
ที่แก้ไขให้ฉัน
หมายเหตุด้านข้าง: เริ่มต้นที่ราง 5.0.0
rake
ถูกเปลี่ยนเป็นrails
ดังนั้นให้ดำเนินการดังต่อไปนี้
ราง db: โยกย้าย VERSION = 0