2012-04-12 38 views
7

Tôi đã tạo khá nhiều di chuyển kể từ khi bắt đầu ứng dụng đường ray của mình. Một số trong số đó chỉ dành cho mục đích thử nghiệm. Bây giờ tôi có rất nhiều di chuyển hoàn toàn vô dụng (ví dụ: tạo một bảng trong quá trình di chuyển và thả bảng trong phần tiếp theo).Xóa di chuyển trong quá khứ trong đường ray

Khi schema.rb được cập nhật khi db: di chuyển được chạy, có thể xóa tất cả di chuyển và bắt đầu từ nội dung thực tế của schema.rb không?

+1

bạn có thể sử dụng 'rake db: schema: load' –

+0

và xóa tất cả các tệp di chuyển? – Luc

Trả lời

8

Có, bạn có thể (và có lẽ nên) xóa các di chuyển cũ hơn. Sẽ có một điểm mà di chuyển cũ của bạn có thể không còn hoạt động vì mã mô hình của bạn sẽ phụ thuộc vào các phiên bản sau của lược đồ của bạn.

Vì vậy, bằng mọi cách xóa các cuộc di cư (bạn có chúng dưới sự kiểm soát nguồn, phải không?), Và sử dụng

rake db:schema:load 

để khởi tạo một cơ sở dữ liệu mới nếu bạn cần.

UPDATE: Hướng dẫn Rails hiện nay có một cái gì đó tương tự để nói về vấn đề này: http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you

+0

Sử dụng 'rake db: schema: load' thay vì' rake db: migrate'? – methyl

+0

No. 'rake db: schema: load' đổ cơ sở dữ liệu hiện tại của bạn và tạo lại nó từ' schema.rb'. 'rake db: migrate' áp dụng bất kỳ di chuyển xuất sắc nào vào cơ sở dữ liệu hiện có. – Thilo

+0

Tại sao điều quan trọng là phải có chúng trong kiểm soát nguồn nếu tôi có phiên bản cuối cùng của schema.rb? Không nên là một trong những người quan trọng? – Luc

0

một cách tốt hơn để làm điều này là để làm như sau ...

Khi bạn đạt đến một mốc quan trọng trong dự án của bạn, và bạn chắc chắn bạn không muốn di chuyển bên dưới phiên bản DB đó, bạn có thể thay thế số lượng tệp di chuyển lớn bằng một tệp di chuyển duy nhất, sau đó bạn có thể sử dụng di chuyển mới "ban đầu" tất cả mọi thứ đã được thực hiện cho đến ngày đó.

Sau đó: tiếp tục sử dụng di chuyển trong dự án của bạn!

Không bao giờ chỉnh sửa tệp schema.rb của bạn bằng tay .. và không bao giờ tải tệp db/schema.rb trừ khi nó dành cho mục đích khôi phục thảm họa.

Bạn không đảm bảo 100% rằng tệp được đăng ký kiểm soát phiên bản là phiên bản mới nhất hoặc thậm chí đúng.

Di chuyển lên và xuống an toàn hơn nhiều và chỉ cần gộp một lượng lớn di chuyển trong một tệp di chuyển duy nhất thay thế.

Bằng cách tải tệp schema.rb theo cách thủ công, bạn hoàn toàn phá vỡ mạng lưới an toàn mà di chuyển cung cấp. Đó không chỉ là ý kiến ​​hay.

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