2012-02-10 26 views
5

Tôi đang cập nhật ứng dụng Rails 1.2.3 lên 3.2.1.Làm cách nào để cập nhật di chuyển khi nâng cấp từ ứng dụng Rails 1.2.3?

Tôi đang cố gắng tìm hiểu cách tôi có thể cập nhật cấu trúc di chuyển tương thích với phiên bản Rails mới nhất, do đó, lý tưởng, bạn chỉ có thể chạy rake db:migrate khi thiết lập ứng dụng. Hiện tại, tôi đã giải quyết vấn đề này bằng cách chỉ thực hiện rake db:migrate:up VERSION=[version_number] của bất kỳ di chuyển nào tôi cần để chạy. Nếu tôi chỉ chạy rake db:migrate, nó sẽ cố gắng chạy lại tất cả các di chuyển từ đầu và nó dừng lại (vì những di chuyển đó đã được chạy trong dump db tôi có).

Di chuyển trong ứng dụng trông giống như thế này 001_add_some_model.rb, 002_add_some_other_model.rb thay vì 20120209182512_add_some_model.rb.

Có ai có kinh nghiệm với điều này không? Làm thế nào tôi có thể sửa lỗi này?

+6

Chậm từ 1.2.3 đến 3.2.1. Chúc may mắn ... – lucapette

+0

@lucapette Cảm ơn! Nó được thực hiện khá nhiều, tôi chỉ muốn làm cho việc di chuyển đang chạy tự nhiên hơn. – jfedick

+0

giải pháp mà tôi đã thấy khá thường xuyên là "bỏ di chuyển và tạo một giải pháp mới làm điểm xuất phát" – lucapette

Trả lời

7

Tôi nghĩ bạn nên khởi động lại di chuyển của mình, thả tất cả di chuyển bạn có và tạo di chuyển mới với định nghĩa về các mô hình hiện tại của bạn. Xem this migration làm ví dụ bắt đầu.

2

Bạn không nên chạy tất cả các lần di chuyển để thiết lập cơ sở dữ liệu mới ngay cả trong ứng dụng Rails 3 cập nhật. Điều này được giải thích trong db/schema.rb:

Lưu ý rằng định nghĩa schema.rb này là nguồn có thẩm quyền cho lược đồ cơ sở dữ liệu của bạn. Nếu bạn cần tạo cơ sở dữ liệu ứng dụng trên hệ thống khác, bạn nên sử dụng db: schema: load, không chạy tất cả các di chuyển từ đầu. Cách thứ hai là một cách tiếp cận thiếu sót và không bền vững (di chuyển nhiều hơn bạn sẽ tích lũy, nó sẽ chạy chậm hơn và khả năng lớn hơn cho các vấn đề).

0

Thay vì những gì đã được đề xuất, tôi sẽ tạo di chuyển mới từ đầu. Bắt đầu cho bạn tất cả các mô hình của bạn ở trạng thái hiện tại và tạo các di chuyển mới cho mỗi kiểu, theo cách này bạn vẫn có thể sử dụng sức mạnh của việc di chuyển sau, như thêm cột vào bảng hoặc thay đổi loại cột.

Nếu bạn tạo một di chuyển đơn lẻ cho tất cả các kiểu máy của mình, like has been suggested bạn sẽ mất bản theo dõi mô hình trong tên di chuyển.

Đây chỉ là một cách khác để làm điều đó và phản ánh tầm nhìn của riêng tôi.

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