2011-03-07 34 views
23

Tôi đang tìm cách tạo tệp di chuyển từ schema.rb. là nó có thể?Tạo tệp di chuyển từ schema.rb

Tôi có nhiều tệp di chuyển vào lúc này và muốn kết hợp mọi thứ vào một tệp di chuyển chính.

Tôi cũng nghĩ rằng tôi có thể vô tình xóa tệp di chuyển tại một số thời điểm.

cảm ơn sự giúp đỡ nào

+0

Mặc dù về mặt kỹ thuật có thể kết hợp di chuyển, tôi nghĩ đó là một ý tưởng thực sự tồi tệ .. đừng làm điều đó! và sử dụng hệ thống kiểm soát phiên bản tốt, ví dụ: Git – Tilo

Trả lời

17

Không cần phải làm điều này. Đối với các cài đặt mới, bạn nên chạy rake db:schema:load, không phải rake db:migrate, điều này sẽ tải giản đồ vào cơ sở dữ liệu, nhanh hơn chạy tất cả các lần di chuyển.

Bạn không bao giờ nên xóa di chuyển và chắc chắn không kết hợp chúng. Đối với việc vô tình xóa một, bạn nên sử dụng một số version control system, chẳng hạn như Git.

+5

Bạn có thể cung cấp một số bằng chứng đó là ý tưởng tồi không? –

+0

@Tomek Việc xóa/kết hợp di chuyển là xấu? Đó là lý do tương tự bạn không bao giờ thực sự muốn xóa các cam kết cũ. Di chuyển cung cấp lịch sử cơ sở dữ liệu của bạn. Dù sao thì cũng không có nhiều lý do. Tôi đã làm việc trên các dự án với hàng trăm và hàng trăm di cư và tại một điểm di cư ban đầu đã bị sụp đổ bởi vì không có cách nào chúng tôi có thể quay trở lại đó, và một vài lý do khác. Nhưng đó không phải là quyết định của tôi. Như tôi đã nói, mặc dù, đối với hầu hết các phần không thực sự có bất kỳ điểm nào trong việc sáp nhập di chuyển (xóa không bao giờ nên được thực hiện). –

+0

Ngoài ra, như Gordon nói trong câu trả lời của mình dưới đây, có thể di chuyển cũ hơn bị hỏng vì tình trạng trì hoãn của ứng dụng. Trong hầu như tất cả các trường hợp, điều này có thể tránh được bằng cách giảm thiểu việc sử dụng các mô hình trong quá trình di chuyển của bạn và có thể làm cho chúng khó khăn. Mọi người dường như luôn sợ sử dụng SQL trong di chuyển — nhưng đó là di chuyển! SQL bền hơn vì nó không phụ thuộc vào ứng dụng của bạn. –

46

Bạn có thể sao chép và dán schema.rb vào di chuyển và đặt lại ngày đó (ví dụ: thay đổi ngày) để không có cơ sở dữ liệu hiện có nào chạy nó. Sau khi bạn tạo di chuyển này, bạn có thể xóa tất cả các lần di chuyển cũ của mình.

Tôi không đồng ý với Andrew rằng bạn không bao giờ nên xóa di chuyển. Di chuyển đột ngột phá vỡ tất cả thời gian dựa trên các lớp mô hình thay đổi và nó rất không tầm thường để sửa chúng. Vì tôi chắc chắn rằng bạn đang sử dụng kiểm soát phiên bản, bạn luôn có thể xem lại lịch sử nếu bạn cần chúng để tham khảo.

+6

Tôi khiêm tốn đề nghị rằng việc di chuyển không nên phụ thuộc vào các lớp mô hình, hoặc chúng sẽ được đảm bảo phá vỡ theo thời gian khi các mô hình của bạn thay đổi. Nếu bạn cần sức mạnh của một mô hình, bạn có thể bao gồm một định nghĩa mô hình đơn giản, dùng một lần trong quá trình di trú. –

+5

Trong khi tốt đẹp về nguyên tắc, điều này là khó thực thi trong thực tế. – ghempton

+0

OMG Đó là sự thật !!!!! Cảm ơn! – gzfrancisco

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