Tìm hiểu về Migration trong rails



  • Là một trong những tính năng quan trọng của Active record, Migration cho phép người lập trình có thể thay đổi được cấu trúc cũng như dữ liệu nằm bên trong database mà không cần phải vào trực tiếp bên trong nó. Với Rails, người thực hiện chỉ cần thông qua Ruby DSL là có thể miêu tả được sự thay đổi của các table. Nếu bạn chưa biết về Active recode hay rails, cùng theo dõi bài viết sau đây để nắm rõ hơn về điều đó.

    1. Migration là gì?

    Có thể hiểu một cách đơn giản rằng nó chính là mô tả một cách chi tiết về việc đổi mới cấu trúc bảng cũng như các dữ liệu nằm bên trong database mà không gặp phải nhiều khó khăn như trước. Bạn có thể hiểu mỗi migration giữ vai trò như là một version của database. Ở thời điểm ban đầu, schema chỉ có trống không, nhưng sau mỗi lần migration thì sẽ modify nhằm mục đích thêm, chuyển đổi vị trí table, cột, rows…

    alt text

    Active record có thể cập nhật schema theo thời gian. Và ở bất kỳ thời điểm nào trong quá khứ nó cũng đều có thể cập nhật được các version của schema đến bản mới nhất. Chưa hết, Active record còn có thể cập nhật được file db/schema.rb, đây là cách để giúp nó thống nhất được cấu trúc mới nhất ở trong database.

    2. Create migration

    • Create migration

    Migration thường sẽ được lưu trữ trong thư mục db/migrate, theo đó cứ mỗi file là sẽ có một class migration. File migration có định dạng YYYYMMDDHHMMSS_create_products.rb, còn file tên thì có đi kèm với thời gian để người thực hiện có thể phân biệt được dễ dàng cùng với các version migation. Yêu cầu đối với các class đó là phải có sự thống nhất toàn bộ với tên file theo đúng định dạng.

    • Run Active record

    Trong rails, nó có tồn tại một vài class rake đóng vai trò để chạy migration. Nếu xét các trường hợp bin/rails db:migrate thì không có cái nào sở hữu được tốc độ chạy nhanh như Class rake run migration. Về thứ tự thực hiện migrate thì nó còn phải dựa vào thời gian.
    Khi bắt đầu cho command db:migrate hoạt động thì đồng thời task db:schema:dump cũng được đề cập đến, task này sẽ cập nhật file schema db/schema.rb và schema đóng vai trò kết nối cấu trúc tất cả của database.

    • Rollback

    Có không ít trường hợp, người thực hiện muốn rollback lại version ngay trước, đó là khi migration không đúng hoặc muốn quay trở lại…Như vậy, dù bạn không nắm rõ được version chính xác của bản cần rollback đi chăng nữa thì cũng chỉ cần run command bên dưới là được.

    3. Schema là gì

    • Schema

    Bởi vì sức mạnh của rails migration là không thể đáp ứng được, do vậy muốn có được nguồn thông tin đủ tin tưởng để tạo schema trong database thì dường như là bất khả thi. Khi deploy new instance của application thì không nhất thiết phải làm toàn bộ các bảng migration cũ. Việc thực hiện có rất có thể sẽ dẫn đến tình trạng lỗi nhiều, khó kiểm soát được. Giải pháp được coi là đơn giản cũng như rút ngắn được thời gian đó là đọc vào database nhưng cái ghi trong file schema hiện tại.

    File schema nếu biết được ở object của Active record thì sẽ xảy ra thuộc tính ra sao khi mà các thông tin schema không tồn tại trong code model? Thường thì trong lập trình nó sẽ được chia ra thành các bảng migration và lưu lại trong đó. Còn đối với việc sử dụng gem annotate_models thì toàn bộ các comment thông tin tóm tắt schema sẽ được cập nhật, đổi mới tự động vào đầu của model file.

    alt text

    • Các loại Schema dumps

    Dumps schema có hai cách khác nhau, đối với dump thì nó sẽ được setting ở bên trong file config/application.rb của config.active_record.schema_format, chỉ định sql hoặc là :ruby. Đối với trường hợp chỉ định :ruby thì schema sẽ được giữu lại ở bên trong db/schema.rb. Bạn chỉ cần click thử vào file thì chắc chắn sẽ nhìn thấy giống như một bảng migration lớn vậy.

    4. Migration và seed data

    Đôi khi cũng có một số trường hợp dùng migration nhằm mục đích gia tăng thêm data và database, song ở rails nó có bao gồm thêm tính năng seed để đưa dât vào database ngay thời điểm ban đầu. Việc thêm code ruby vào file db/seeds.rb và run bin/rails db:seed sẽ xuất hiện data ngay tức thì.

    alt text

    Một vài chia sẻ trên đây sẽ giúp bạn hiểu hơn về lập trình ứng dụng, đảm bảo hoàn thành công việc được hiệu quả hơn. Nếu thắc mắc về lập trình, truyền thông, làm seo web thì đừng quên liên hệ với chúng tôi để được tư vấn nhiều hơn bạn nhé!


Log in to reply