2013-10-16 18 views
7

Tôi có một số nhánh trên git, lược đồ trên các nhánh này nằm trên các phiên bản khác nhau. Sau khi chuyển sang một chi nhánh, hãy nói new_feature (với di chuyển đang chờ xử lý) nếu tôi thực hiện rake db:setup thì nó khuyên tôi chạy quá trình di chuyển đang chờ xử lý.rake db: di chuyển cập nhật schema.rb với các bảng đã bị xóa

Khi tôi làm điều đó, giản đồ của tôi được cập nhật với các bảng đã bị xóa trong cùng một nhánh.

Nếu tôi làm rake db:reset thì nó hoạt động tốt.

Tôi biết sự khác biệt giữa db:setupdb:reset. Người sau không db:drop và sau đó db:setup

Nhưng đang tự hỏi tại sao các schema xuất hiện những giảm bảng trên rake db:migrate

Am chắc chắn đang thiếu một số w.r.t. ray kiến ​​thức quá trình tải và di chuyển giản đồ

Mọi thông tin chi tiết sẽ giúp ích rất nhiều. Cảm ơn trước

Trả lời

5

Có vẻ như schema.rb của bạn được kiểm tra thành git, đó là một điều tốt. Vì vậy, khi bạn chuyển đổi các nhánh, schema.rb của bạn khác với lược đồ db thực tế của bạn.

rake db: di chuyển sẽ chỉ kiểm tra phiên bản lược đồ trong schema.rb và nếu phiên bản cơ sở dữ liệu là trẻ hơn thì nó sẽ chạy tất cả các lần di chuyển "đang chờ xử lý". Nó chỉ tạo lại tệp schema.rb nếu di chuyển được chạy.

Trong trường hợp lược đồ thực tế của bạn ở phiên bản cao hơn phiên bản được báo cáo trong schema.rb, nó là điều duy nhất an toàn, không có gì. Lý do là có thể không có tệp di chuyển để cập nhật tệp hoặc các hoạt động của cơ sở dữ liệu có thể buộc tạo lại bảng/cắt bớt hoặc một cái gì đó không kém phần khó chịu. Có những trường hợp cạnh khác của các phiên bản không khớp nhưng tôi nghĩ bạn có ý tưởng.

Vì vậy, bạn có một vài tùy chọn để làm việc trong tâm lý di chuyển, nếu bạn muốn giữ dữ liệu giữa các nhánh.

A) Mọi dữ liệu bạn cần giữa các nhánh giữ trong tệp hạt db. Sau đó, bạn có thể thả/tạo db của mình mà không có bất kỳ mối quan tâm nào

B) Trước khi chuyển đổi chi nhánh, hãy cuộn lại các lần di chuyển khác nhau. Trong nhánh mới cuộn chúng trở lại.

C) Cheat, và xóa lược đồ db.rb và chạy lại rake db: di chuyển. Đây là gian lận bởi vì, nó có thể dễ dàng gây ra dataloss, schema.rb không nhất quán trong điều khiển phiên bản của bạn, và đau đầu cho các thành viên khác trong nhóm vì di chuyển của bạn không có ý nghĩa gì cả.

Và một lời khuyên. Nếu bạn đã cam kết nó thành git, đừng thay đổi tệp di chuyển cũ. chỉ cần tạo một cái mới. Chúng tạo thành một ngăn xếp hợp lý và có nghĩa là thay đổi tuần tự lược đồ của bạn.

Các vấn đề liên quan