2012-03-14 35 views
9

Tôi đang học đường ray và tôi đã xem xét Di chuyển. Dường như mỗi khi tôi muốn chỉnh sửa một mô hình, tôi sẽ cần phải thêm một kịch bản di chuyển, mặc dù tôi chưa được sản xuất.Đường ray - Tạo tập lệnh di chuyển từ mô hình

Bạn có thể chỉnh sửa mô hình của mình, thêm tất cả các thuộc tính bạn cần vào nó và trước khi phát hành, có tập lệnh di chuyển được tự động phát không?

Cảm ơn!

+1

Thực sự không quá khó để viết kịch bản di chuyển theo cách thủ công. –

+0

đúng, nhưng đối với mọi thay đổi tôi có (trong quá trình phát triển, tôi có rất nhiều thay đổi), tôi cần một vài kịch bản di chuyển AddXToY ... – Karan

+2

tốt, tôi đoán tôi có thể chỉnh sửa kịch bản di dân gốc, và thả và tải lại cơ sở dữ liệu – Karan

Trả lời

3

Tôi đồng ý với nhận xét từ trước tới nay. Ý tưởng di chuyển là giúp bạn dễ dàng điều chỉnh giản đồ dữ liệu phù hợp với ứng dụng của mình khi bạn muốn thêm các trường mới. Đó là một hệ thống đơn giản và đẹp. Vì vậy, có, bạn có thể (và nên) sử dụng rails generate migration... như không chỉ tạo ra mã thích hợp trong nhiều trường hợp thông thường, nó còn theo dõi việc di chuyển nào đã được chạy trong các phiên bản khác nhau của cơ sở dữ liệu. Xem http://guides.rubyonrails.org/migrations.html#creating-a-migration

Một quy trình làm việc chung có thể là một cái gì đó như thế này:

  • tạo ra một mô hình mới, ví dụ người dùng với các lĩnh vực như first_name, last_name, user_name
  • này sẽ tạo ra một di cư đi kèm, mà bạn có thể chạy bằng cách sử dụng bundle exec rake db:migrate - lược đồ cơ sở dữ liệu của bạn sẽ được cập nhật
  • bạn quyết định bạn muốn có thêm thông tin, chẳng hạn như ngày sinh, do đó hãy chạy rails generate migration AddBirthdateToUser birthdate:date. Đối với một số thao tác đơn giản như thêm cột, chỉ mục, v.v., mã di chuyển đầy đủ sẽ được tạo; trong các trường hợp khác, bạn cần viết di chuyển. Khi hoàn tất, hãy chạy di chuyển.
  • Nếu bạn phát hiện sự cố khi phát triển, ví dụ loại trường phải nổi, không phải số nguyên hoặc bạn quên thêm chỉ mục, bạn có thể quay lại di chuyển (bundle exec rake db:rollback), khắc phục di chuyển và chạy lại.
  • chạy thử nghiệm của bạn (sẽ chạy di chuyển) và khi tất cả hoạt động cho bạn cục bộ, hãy kiểm tra tệp (bao gồm cả di chuyển) và triển khai tới máy chủ phân phối hoặc QA, có bản sao cơ sở dữ liệu riêng.
  • chạy rake db:migrate trên máy chủ dàn dựng. Nếu bạn đang ở trên một nhóm và các nhà phát triển khác đã kiểm tra di chuyển, họ cũng sẽ chạy. Bây giờ mã và lược đồ dữ liệu của bạn được đồng bộ hóa.
  • lặp lại :-)

Không có hại gì chạy di cư trong việc triển khai sản xuất (Tôi trân trọng không đồng ý với một lời nhận xét ở trên) - bạn nên nắm lấy ý kiến ​​cho rằng thay đổi, thậm chí thay đổi như thế này (có thể vô cùng khó khăn trong môi trường khác) là một phần bình thường trong cuộc sống hàng ngày của Rails!

4

Nếu bạn sử dụng đường ray 3+ bạn có thể muốn xem xét DataMapper thay vì ActiveRecord. Nó cho phép bạn xác định mô hình dữ liệu trong mô hình thay vì nhiều tệp di chuyển. Theo tôi hiểu, DataMapper cho phép bạn tạo các di chuyển từ các thay đổi.

Đây là mẫu cố gắng và đáng tin cậy thường được sử dụng trong cộng đồng ORM rộng hơn.

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