7

Tôi gặp một vấn đề mà tôi đang làm việc trên hai chi nhánh trên một dự án đường ray và mỗi dự án có một di chuyển để thêm một cột. Vào thời điểm đó, rake db:migrate:reset gây ra sự cố và tôi chỉ dựa vào số schema.rb để thể hiện chính xác trạng thái của cơ sở dữ liệu của tôi. Tại một thời điểm, tôi đã gặp một vấn đề trong đó một cột được thêm vào bởi nhánh A đã đi vào lược đồ của nhánh B. Vì migrate:reset không phải là một tùy chọn, tôi đã sử dụng để chỉnh sửa thủ công tệp lược đồ. Tôi cam kết thay đổi này về cơ bản đã xóa cột từ nhánh A mà tôi không cần trong schema.rb của nhánh B.Được coi là an toàn để chỉnh sửa schema.rb trong đường ray

Sự cố xảy ra sau khi tôi đã hợp nhất chi nhánh A thành chính. Khi tôi cố gắng để rebase chi nhánh B để làm chủ, tôi vẫn có cam kết đó trong B để xóa cột (mà bây giờ đã trở thành có liên quan bởi vì nó là chủ) trong tệp lược đồ. Git không thấy xung đột cho điều này và tự động hợp nhất nó. Vào cuối đợt rebase của tôi, tôi thấy rằng lược đồ của tôi không nhất quán với những gì tôi có trong master.

Sửa lỗi của tôi là chỉnh sửa lại tệp lược đồ và thêm cột đã xóa trước đó vào tệp lược đồ theo cách thủ công. Câu hỏi của tôi là: Điều này có được coi là độc đáo không? nguy hiểm? hacky? Ngay bây giờ nó liên quan đến một cột nhưng nếu điều này liên quan đến việc xóa nhiều cột/bổ sung giải pháp (nguy hiểm?) Có thể dẫn đến nhiều vấn đề hơn và db/schema.rb không thống nhất.

Trả lời

6

Thường được coi là thực tiễn không tốt để chỉnh sửa tệp schema.rb của bạn.

Theo Rails Guide on Migrations:

Migrations, hùng mạnh như họ có thể được, không phải là những nguồn có thẩm quyền cho giản đồ cơ sở dữ liệu của bạn. Vai trò đó rơi vào db/schema.rb hoặc tệp SQL mà Bản ghi Hoạt động tạo ra bằng cách kiểm tra cơ sở dữ liệu. Chúng không được thiết kế để chỉnh sửa, chúng chỉ thể hiện trạng thái hiện tại của cơ sở dữ liệu.

schema.rb được cập nhật mỗi khi bạn chạy một di dân mới:

Lưu ý rằng chạy db: di chuyển cũng gọi db: nhiệm vụ bãi, mà sẽ cập nhật db của bạn/schema: schema. rb tập tin để phù hợp với cấu trúc của cơ sở dữ liệu của bạn.

Tôi khuyên bạn nên dành một chút thời gian để sắp xếp mọi thứ và giúp tệp schema.rb trở lại đúng hướng và điều chỉnh tối đa bộ di chuyển mới nhất.

+0

Đồng ý. Bạn đang có khả năng hosing lên các tiện ích của "rake db: migrate version = xxx" và tạo ra nhức đầu trong tương lai bằng cách đi ra khỏi đặt phòng và chỉnh sửa bằng tay schema.rb. – railsdog

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