เนื่องจากปัญหาการปรับใช้บางอย่างฉันจึงหยุดติดตาม schema.rb ใน git อย่างไรก็ตามฉันได้ยัดมันขึ้นมาและบางแห่งระหว่างทางไฟล์ schema.rb ของฉันหายไป
มีวิธีสร้าง schema.rb จากฐานข้อมูลหรือจากการโอนย้ายหรือไม่ ฉันไม่ต้องการให้ข้อมูลที่มีอยู่สูญหาย
เนื่องจากปัญหาการปรับใช้บางอย่างฉันจึงหยุดติดตาม schema.rb ใน git อย่างไรก็ตามฉันได้ยัดมันขึ้นมาและบางแห่งระหว่างทางไฟล์ schema.rb ของฉันหายไป
มีวิธีสร้าง schema.rb จากฐานข้อมูลหรือจากการโอนย้ายหรือไม่ ฉันไม่ต้องการให้ข้อมูลที่มีอยู่สูญหาย
คำตอบ:
หากคุณเรียกใช้rake -T
มันจะแสดงรายการงานคราดที่เป็นไปได้ทั้งหมดสำหรับโครงการ Rails ของคุณ หนึ่งในนั้นคือdb: schema: dumpซึ่งจะสร้าง schema.rb ขึ้นใหม่สำหรับแอป Rails จากฐานข้อมูล
bundle exec rake db:schema:dump
rake db:schema:dump
บนราง 2.0
ระวัง
rake db:schema:dump
จะถ่ายโอนคีมาฐานข้อมูลปัจจุบันจากฐานข้อมูล ซึ่งหมายความว่าหากคุณทำการเปลี่ยนแปลงใด ๆ กับการย้ายข้อมูลของคุณการย้ายข้อมูลจะไม่ปรากฏในไฟล์ schema.rb ซึ่งไม่ใช่สิ่งที่คุณต้องการ IMO
หากคุณต้องการสร้างสคีมาใหม่จากการย้ายข้อมูลให้ทำดังต่อไปนี้:
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
rake db:schema:dump
คำสั่ง
rake db:schema:dump
ฉันคิดว่าสิ่งนี้ยังใช้ได้ใน Rails 3 - มันสร้าง schema.rb ขึ้นมาใหม่จากฐานข้อมูล
ทางรถไฟ 5 ทาง:
rails db:schema:dump
หรือถ้าคุณเจอGem :: LoadErrorแล้ว:
bundle exec rails db:schema:dump
บันทึก:
ในราง 5 ก็จะแนะนำว่างานจะมีการสร้าง / ดำเนินการโดยใช้rails
แทนการrake
นี้เป็นเพียงการจำรางสร้างงานที่มีส่วนขยายเห็นใน.rake
lib/tasks/myTask.rake
ซึ่งหมายความว่างานเหล่านี้สามารถดำเนินการได้โดยการสั่งrake
ล่วงหน้า
ถ้าคุณสร้างใหม่schema.rb
ในเครื่องคุณก็น่าจะโอเค เป็นเพียงการแสดงโครงสร้างของตารางฐานข้อมูลของคุณ ข้อมูลเองไม่มีอยู่ในไฟล์นี้
ในการสร้างschema.rb
ไฟล์ของคุณใหม่ให้เรียกใช้:
bundle exec rake db:schema:dump
จากนั้นก็คอมมิตschema.rb
ไฟล์ใหม่และคุณจะต้องมีรูปร่างที่ดี!
โดยตรงจากไฟล์ schema.rb เอง:
หากคุณต้องการสร้างฐานข้อมูลแอปพลิเคชันบนระบบอื่นคุณควรใช้
db:schema:load
ไม่ใช่เรียกใช้การย้ายทั้งหมดตั้งแต่เริ่มต้น วิธีนี้เป็นแนวทางที่มีข้อบกพร่องและไม่ยั่งยืน (ยิ่งคุณสะสมการโยกย้ายมากเท่าไหร่ก็จะทำงานช้าลงและมีโอกาสเกิดปัญหามากขึ้น)
ดังนั้นอย่าทำตามคำแนะนำrake db:migrate
ซึ่งแนะนำใน - ในขณะที่เขียนนี้ - คำตอบที่ได้คะแนนต่ำสุด
ฉันมีปัญหาคล้ายกันที่สคีมาเก่าของฉันไม่รีเฟรชแม้ว่าฉันจะลบการย้ายข้อมูล
ดังนั้นสิ่งที่ฉันทำคือทิ้งตารางที่มีอยู่ทั้งหมดในฐานข้อมูลและย้ายข้อมูลอีกครั้ง จากนั้นการรันคำสั่ง "db: schema: load" ทำให้ฉันมี schema.rb ใหม่
drop table my_table_name // deleted them individually
rake db:migrate
rake db:schema:dump // re-created a new schema