Tôi nghĩ bạn nên khắc phục sự di chuyển vi phạm ít mong manh hơn, tôi đoán rằng một vài câu hỏi if
và có lẽ là rescue
là đủ.
Nhưng, nếu sửa chữa di chuyển thực sự không phải là một tùy chọn, bạn có thể giả mạo nó theo nhiều cách khác nhau. Trước hết, bạn chỉ có thể bình luận ra các phương pháp di chuyển, chạy rake db:migrate
, và sau đó bỏ ghi chú (hoặc hoàn nguyên) việc di chuyển vi phạm.
Bạn cũng có thể giả mạo nó bên trong cơ sở dữ liệu nhưng loại này không được khuyến khích trừ khi bạn biết bạn đang làm gì và bạn không ngại vá những thứ khi bạn (chắc chắn) mắc lỗi. Có một bảng trong cơ sở dữ liệu của bạn có tên là schema_migrations
có một cột varchar(255)
duy nhất được gọi là version
; bảng này được sử dụng bởi db:migrate
để theo dõi việc di chuyển nào đã được áp dụng. Tất cả những gì bạn cần làm là INSERT giá trị version
thích hợp và rake db:migrate
sẽ nghĩ rằng quá trình di chuyển đã được thực hiện. Tìm file vi phạm di cư:
db/migrate/99999999999999_XXXX.rb
sau đó đi vào cơ sở dữ liệu của bạn và nói:
insert into schema_migrations (version) values ('99999999999999');
nơi 99999999999999
là, tất nhiên, số lượng từ tên tập tin của di cư. Sau đó, chạy rake db:migrate
nên bỏ qua việc di chuyển đó.
Tôi muốn sử dụng tùy chọn thứ hai trước thứ ba, tôi chỉ bao gồm tùy chọn "hack schema_versions
" để hoàn tất.
Nguồn
2012-01-10 22:09:11
Ya, tôi chỉ cần đi trước và cắt ra những cuộc di cư vi phạm tạm thời. Cá nhân tôi đã tạo ra các câu lệnh If đúng hoặc chỉ kiểm tra môi trường sản xuất, nhưng rõ ràng là người xử lý việc di chuyển không tin vào việc sử dụng db: di chuyển trong khi phát triển = P Thanks – hmind
@hmind: "người xử lý di chuyển không tin vào việc sử dụng db: di chuyển trong khi phát triển ". Ôi trơi. Xuất bản cho hệ thống sản xuất của bạn phải là một thời gian vui vẻ siêu hạnh phúc! –
may mắn thay, tôi không xử lý hoặc haha – hmind