Suy ngẫm về chức năng Migration của Rails
RubyOnRails
40
White

Lơi Rệ viết ngày 23/05/2015

Nếu ai đã làm Rails thì không còn lạ lẫm gì với chức năng Migration của Rails. Nếu ai chưa biết thì tôi xin giới thiệu sơ qua chức năng này. Rails cho phép người dùng tạo ra những migration file, migration file giúp thay đổi cấu trúc của Database Schema dễ dàng thông qua các cú pháp abstract. Thêm vào nữa, Rails còn cung cấp các rake task như rake db:migraterake db:rollback để người dùng có thể áp dụng hoặc huỷ bỏ và đi ngược lại thời gian. Bạn nào chưa rành thì có thể xem thêm tại ActiveRecord Migration Guide.

Khi nghe đến chức năng rollback này thì chắc hẳn DevOps nào cũng sướng rên vì đây có lẽ là chức năng được yêu cầu nhiều nhất của giới DevOps. Cứ tưởng tượng có một nút Rollback để xoá bỏ các lệnh phóng bomb nguyên tử đi chẳng hạn. Nghe thì như thiên đường, nhưng thực tế thì chức năng rollback chẳng ai dùng trên môi trường production cả. Thứ nhất Rails cho phép người dùng tương tác với dữ liệu và cả cấu trúc của DB, và khi đã chạy migration rồi thì không có gì đảm bảo là có thể phục hồi lại được cấu trúc hay dữ liệu ban đầu đó nữa. Thứ hai khi rollback thì Rails sẽ tự động cập nhật config/schema.rb và trỏ version về version lúc trước, điều này tai hại là vì nó thay đổi dòng thời gian của version history. Hay nói một cách khác là việc lưu version ở trong bảng schema_migrations là vô nghĩa. Thế nên 99.9% dân Rails toàn roll-foward, hay tạo một migration mới thay vì rollback.

Thế nên mới thấy chức năng rollback của Rails chỉ hữu dụng trên môi trường development, còn khi ở môi trường production thì không hợp lý.

Tôi hiện đang viết chức năng migration cho lotus/model, xem PR. Và một trong những ý tưởng le lói trong đầu tôi là hoàn toàn bỏ chức năng rollback, hoặc chỉ loại bỏ trên môi trường production.

Bên cạnh đó, tôi cũng có một ý tưởng khác là config/schema.rb là chứng từ thật của mọi thay đổi liên quan đến cấu trúc schema. Điều đó nghĩa là gì? Điều này cõ nghĩa là không cần lưu trữ lại các file migration sau khi đã áp dụng chúng trên production. Cũng rất là thường khi các bạn thấy một số lập trình viên xoá các migration file và nén chúng lại thành 1 file sau một thời gian dài. Tôi mới tự hỏi nếu lotus cho phép người dùng làm công việc dọn dẹp đó dễ dàng thông qua một rake task vd rake db:apply để migrate các pending migration và xoá chúng liền sau đó sẽ giúp cải thiện qui trình phát triển của các lập trình viên chăng? Có thể..

Một vài dòng tản mạn những suy nghĩ cuối tuần, có lẽ cái thích thú nhất là được thử nghiệm với những ý tưởng táo bạo, thách thức các khái niệm cũ hiện hành. Rất mong nhận được phản hồi từ những bạn đam mê chủ đề này.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Lơi Rệ

43 bài viết.
223 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
70 12
Sự sống còn của các công ty kỹ thuật phụ thuộc vào nguồn nhân lực chất xám của họ. Thế nên rất thiết yếu cho việc đầu tư xây dựng team có khả năng ...
Lơi Rệ viết hơn 2 năm trước
70 12
White
40 7
Trời se se lạnh, Melbourne chuyển mùa, ngồi trong quán cafe bắt đầu một ngày làm việc mới với suy nghĩ tại sao các bạn Việt Nam không muốn tham gia...
Lơi Rệ viết 3 năm trước
40 7
White
36 15
Thế nào là làm việc từ xa? Internet, một trong những phát minh vĩ đại nhất của con người thế kỷ 20. Công nghệ này xoả bỏ rào cản vật lý giữa các n...
Lơi Rệ viết hơn 2 năm trước
36 15
Bài viết liên quan
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết 3 năm trước
8 1
White
0 0
Performance regression in ActiveRecord model instance creation in Rails 4.1.x When you guys met the performance issue in Rails 4.1.x. And after be...
Luu Nguyen viết gần 2 năm trước
0 0
White
21 10
Bài này mình dịch từ bài viết sau : http://kakubei.blogspot.com/2012/05/whyihaterails.html Bản thân mình cũng đang sử dụng Rails trong công việc, ...
Duy Anh viết gần 3 năm trước
21 10
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
43 bài viết.
223 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!