Migrate Là Gì

     

Migration là một trong những tính năng của Active record có thể chấp nhận được bạn biến hóa cả kết cấu và dữ liệu trong database. Nạm vì biến hóa trực tiếp vào database thì Rails chất nhận được bạn thực hiện Ruby DSL để diễn đạt việc chuyển đổi các table.Tiện cách đây không lâu dự án mình chạm mặt vấn đề về migration buộc phải mình viết bài viết này. Bài xích toán đưa ra là quý khách muốn rollback migration về thời điểm nào kia chỉ để chạy code sinh hoạt version nào đó thôi mà không hẳn code hiện nay tại. Cùng lúc đó bên tôi đã rollback nhưng lại bị lỗi rollback mà trong những lúc code k ai nghĩ mang đến trường hợp đó cả. Đó cũng là một trong vấn đề mà ta cần hiểu rõ hơn về migration để tránh gần như trường phù hợp như vậy.Sau lúc đọc nội dung bài viết bạn rất có thể biết thêm về:

Hiểu về migration, các cách tạoCác biện pháp chạy migration, rollback chúngHiểu thêm về schema

1. Tổng quan

Migration là một trong những cách thuận tiện để thay đổi cấu trúc bảng và dữ liệu trong database một cách dễ dàng. Bằng cách sử dụng Ruby DSL các bạn k cần phải viết SQL bởi tay, nó có thể giúp bạn biến hóa database 1 cách độc lậpTưởng tượng mỗi migration khớp ứng vs 1 version của database. Ban đầu, schema là rỗng, và các lần migration thì sẽ modify để địa chỉ cửa hàng hoặc remove table, columns hoặc rows. Active record biết cách để update schema theo thời gian. Cùng từ bất cứ thời điểm như thế nào trong quá khứ cũng rất có thể update version của schema đến phiên bản mới nhất. Active record cũng trở thành update tệp tin db/schema.rb để gia công cho thống độc nhất với cấu trúc mới độc nhất vô nhị của database.Chúng ta cùng nhìn qua ví dụ về 1 migration:

class CreateProducts Đây là một migration tạo thành bảng products vào database. Tất cả 2 trường chính là name và description. Một cột khóa đó là id cũng biến thành được thêm vào sau thời điểm chạy migration này, đấy là khóa chủ yếu mặc định mang lại tất cả mã sản phẩm của Active Record. Timestamps sẽ chế tạo bảng 2 cột đó là : created_at và updated_at. Các cột này sẽ tiến hành quản lý auto bởi ActiveRecord nếu chúng tồn tạiTrước khi tiến hành migration thì ko tồn tại table làm sao cả. Run migration thì table sẽ tiến hành sinh ra. Với Active record cũng có cách để back lại loại migration cơ hội nãy bằng cách là Rollback lại cái migration đó thì bảng được chế tác lúc trước sẽ ảnh hưởng xóa.Ta cũng có thể viết migration theo phong cách khác để hiểu biện pháp nó rollback:

class ChangeProductsPrice dir.up là chạy migration. Dir.down là chạy rollback lại, trở lại thời điểm trước khi chạy migrationVí dụ như nếu bọn họ change_column thì rollback sẽ ảnh hưởng lỗi, cần viết code theo phong cách này.

Bạn đang xem: Migrate là gì

2. Chế tác migration

2.1 tạo ra migration

$ bin/rails generate migration AddPartNumberToProductsCau lệnh sẽ tạo nên ra 1 migration mới:

class AddPartNumberToProducts nếu migration tên có dạng "AddXXXToYYY" hoặc "RemoveXXXFromYYY" sẽ khởi tạo ra các migration add_column hoặc remove_column. Ta rất có thể thêm vào các column và type của bọn chúng theo sau:

$ bin/rails generate migration AddPartNumberToProducts part_number:stringsẽ tạo thành ra:

class AddPartNumberToProducts các migration mang tên theo dạng CreateXXX cùng theo sau là danh sách các tên column cùng type của chúng sẽ tạo ra table mang tên XXX với hồ hết column sẽ liệt kê. Ví dụ:

$ bin/rails generate migration CreateProducts name:string part_number:stringSẽ tạo thành migration:

class CreateProducts

2.2 tạo ra model

Khi tạo nên model có thể tạo migration theo đó. Ví dụ chúng ta tạo 1 model mới thương hiệu là Product.

$ bin/rails generate model Product name:string description:textNó sẽ tạo nên ra 1 migration bắt đầu như sau:

class CreateProducts chúng ta có thể thêm những cột khác nếu còn muốn

*
)

3. Chạy migration

Rails hỗ trợ 1 tập vừa lòng của bin/rails tasks nhằm chạy migrationĐầu tiên câu lệnh họ hay áp dụng nhất đó là rails db:migrate . Ở đây nó chỉ chạy các migration không chạy,. Các migration chạy rồi nó sẽ k chạy lại nữa. Nó sẽ đuổi theo thứ từ thời gianMột xem xét là lúc chạy db:migrate nó cũng sẽ tự động chạy db:schema:dump nhằm cập nhập tệp tin db/schema.rb mang lại trùng khớp với cấu tạo database của bạnNếu bạn muốn chạy 1 migration cụ thể. Bạn cũng có thể chạy bằng phương pháp lấy thương hiệu version là hàng số lâu năm ở file migration cùng chạy:

3.1 Rolling back

Rollback được sử dụng khi họ tạo không nên 1 migration và ước ao sửa chúng, muốn quay trở lại tại thời gian chạy migration lỗi đó. Ta hoàn toàn có thể quay lại migration trước bằng cách:

$ bin/rails db:rollbackNó sẽ rollback tại thời điểm mới nhất của migration, nếumuốn rollback lại những version trước kia nữa thì hướng dẫn và chỉ định parameter STEP. Ví dụ:

$ bin/rails db:rollback STEP=3Nó vẫn revert 3 migration gần nhất.Ta dùng db:migrate:redo để chạy roll back cùng migration lại:

$ bin/rails db:migrate:redo STEP=3Đây là những cách giúp họ sửa sai các migration mà không cần thiết phải reset migration.

Một chú ý khi tạo migration họ nên soát sổ xem nó gồm rollback được hay là không ^^. Có thể nó sẽ không còn rollback được bởi nhiều lý do. Ví như change_column thì sẽ không còn rollback dc, hoặc khi ta thêm đk vào để chạy migration.

3.2 setup database

Ta sử dụng db:setup để giúp đỡ tạo ra database với load schema cùng khởi chế tác chúng với seed.

Xem thêm: Cách Thay Đổi Mật Khẩu Id Apple, Làm Thế Nào Để Thay Đổi Mật Khẩu Apple Id

3.3 Reset database

Dùng db:reset để dropdatabase và cài đặt lại nó. Nó tương đương với 2 câu lệnh: db:drop cùng db:setup.

3.4 Chạy 1 migration bất kì

Nếu bạn có nhu cầu chạy 1 migration với up hoặc down, ta có thể dùng db:migrate:up và db:migrate:down. Và thêm version phía sau để xác định đó là tệp tin migration nào

3.5 Chạy migration trên các môi trường xung quanh khác nhau

Mặc đinh trường hợp chạy db:migrate nó vẫn chạy trên môi trường xung quanh development. Nếu bạn muốn nó điều khiển xe trên các môi trường xung quanh khác thì chỉ việc thêm biến môi trường thiên nhiên vào đằng tiếp đến là RAILS_ENV. Ở đây mình thích chạy migrate trên môi trường xung quanh test:

$ bin/rails db:migrate RAILS_ENV=test

4. Schema

4.1 Mục đích

File schema đã giúp chúng ta cũng có thể biết các thuộc tính của đối tượng người dùng Active Record có. Những tin tức này nó không tồn tại trong code mã sản phẩm và thông qua các migration nó được tạo ra ra.

4.2 những loại Schema Dump

Có 2 phương thức để Dump schema. Biện pháp dump thì được setting trong tệp tin config/application.rb của config.active_record.schema_format. Hướng dẫn và chỉ định sql hay là :rubyNếu hướng đẫn :ruby thì schema sẽ tiến hành lưu nghỉ ngơi db/schema.rb. Mở file này có chắc chắn là có thể nhìn thấy hệt như là 1 bảng migration lớn.

Xem thêm: "Triệu Hồi" Team Sống Ảo Đi Liền 20 Địa Điểm Trang Trí Noel Đẹp Ở Sài Gòn

class AddInitialProducts Để thêm dữ liệu sau thời điểm database được tạo. Rails có một tính năng rất có thể giúp quy trình này trở nên nhanh chóng. Bằng cách thêm code vào db/seeds.rb cùng chạy rails db:seed.

5.times vày |i| Product.create(name: "Product ##i", description: "A product.")endBài viết đến đây là dứt rồi. Hi vọng nội dung bài viết có thể giúp ích cho bạn, giúp đỡ bạn hiểu rộng về migration.!

Nguồn tham khảo:http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-existing-migrations