Migrate là gì

Migration là một trong những tính năng của Active sầu record chất nhận được các bạn biến hóa cả kết cấu cùng tài liệu trong database. Tgiỏi bởi vì đổi khác trực tiếp vào database thì Rails chất nhận được bạn áp dụng Ruby DSL để diễn đạt câu hỏi thay đổi những table.Tiện cách đây không lâu dự án mình gặp vấn đề về migration đề nghị bản thân viết bài viết này. Bài toán đặt ra là Khách sản phẩm mong rollbaông xã migration về thời gian như thế nào đó chỉ nhằm chạy code ở version nào kia thôi nhưng không hẳn code hiện thời. Và thời gian đó mặt tôi đã rollbaông xã cơ mà bị lỗi rollbachồng mà lại trong những lúc code k ai suy nghĩ mang đến trường hợp kia cả. Đó cũng là một trong sự việc nhưng ta phải làm rõ rộng về migration để tách phần đa ngôi trường đúng theo điều này.Sau lúc đọc bài viết bạn cũng có thể hiểu thêm về:

Hiểu về migration, những bí quyết tạoCác cách chạy migration, rollbaông chồng chúngHiểu thêm về schema

1. Tổng quan

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

class CreateProducts Đây là 1 migration tạo nên bảng products trong database. Có 2 ngôi trường sẽ là name và description. Một cột khóa chính là id cũng biến thành được cấp dưỡng sau khoản thời gian chạy migration này, đấy là khóa thiết yếu mang định cho tất cả mã sản phẩm của Active sầu Record. timestamps vẫn tiếp tế bảng 2 cột chính là : created_at cùng updated_at. Các cột này sẽ được thống trị tự động hóa vày ActiveRecord giả dụ chúng tồn tạiTrước lúc triển khai migration thì không vĩnh cửu table nào cả. Run migration thì table sẽ được hình thành. Và Active sầu record cũng có phương pháp để baông xã lại dòng migration thời điểm nãy bằng phương pháp là Rollback lại cái migration kia thì bảng được chế tạo ngày trước có khả năng sẽ bị xóa.Ta cũng rất có thể viết migration theo 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, quay trở về thời điểm trước lúc chạy migrationlấy một ví dụ nhỏng trường hợp chúng ta change_column thì rollback sẽ ảnh hưởng lỗi, phải viết code theo phong cách này.

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

2. Tạo migration

2.1 Tạo migration

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

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

$ bin/rails generate migration AddPartNumberToProducts part_number:stringsẽ khởi tạo ra:

class AddPartNumberToProducts Các migration mang tên theo mô hình CreateXXX và theo sau là danh sách những tên column và type của chúng sẽ khởi 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 model

Khi tạo nên model rất có thể sinh sản migration theo đó. ví dụ như họ tạo thành 1 model mới tên là Product.

$ bin/rails generate Mã Sản Phẩm Product name:string description:textNó sẽ tạo nên ra 1 migration mới nlỗi sau:

class CreateProducts Quý khách hàng có thể thêm nhiều cột khác nếu như muốn

*
)

3. Chạy migration

Rails cung cấp 1 tập hợp của bin/rails tasks để chạy migrationTrước hết câu lệnh bọn họ hay được dùng độc nhất vô nhị chính là rails db:migrate . Ở phía trên nó chỉ chạy những migration không chạy,. những migration chạy rồi nó vẫn k chạy lại nữa. Nó vẫn đuổi theo trang bị tự thời gianMột chú ý là lúc chạy db:migrate nó cũng biến thành tự động hóa chạy db:schema:dump để cập nhập tệp tin db/schema.rb mang lại trùng khớp cùng với cấu tạo database của bạnNếu bạn muốn chạy 1 migration cụ thể. chúng ta cũng có thể chạy bằng cách đem tên version là dãy số nhiều năm sinh hoạt file migration cùng chạy:

3.1 Rolling back

Rollbaông xã được áp dụng Lúc chúng ta tạo ra không đúng 1 migration và mong sửa chúng, mong mỏi trở lại tại thời gian chạy migration lỗi đó. Ta hoàn toàn có thể trở lại migration trước bởi cách:

$ bin/rails db:rollbackNó đang rollbaông xã tại thời điểm mới nhất của migration, nếuước ao rollbaông chồng lại nhiều version trước đó nữa thì hướng dẫn và chỉ định parameter STEP. Ví dụ:

$ bin/rails db:rollbaông chồng STEP=3Nó đang revert 3 migration gần nhất.Ta dùng db:migrate:revày để chạy roll baông xã cùng migration lại:

$ bin/rails db:migrate:revày STEP=3Đây là các biện pháp giúp bọn họ sửa không đúng những migration nhưng không cần thiết phải rephối migration.

Một chú ý Lúc chế tạo migration bọn họ cần chất vấn coi nó tất cả rollbachồng được hay là không ^^. cũng có thể nó sẽ không còn rollbaông xã được vày nhiều nguyên nhân. lấy một ví dụ như change_column thì sẽ không rollbachồng dc, hoặc Khi ta thêm điều kiện vào nhằm chạy migration.

3.2 Cài đặt database

Ta dùng db:setup để giúp đỡ tạo nên database với load schema với khởi chế tạo bọn chúng với seed.

Xem thêm: Dịch Vụ Bưu Điện Cod Bưu Điện Trong Quá Trình Mua Bán Hàng Hóa

3.3 Rephối database

Dùng db:rephối nhằm dropdatabase và thiết lập lại nó. Nó tương tự cùng với 2 câu lệnh: db:drop và db:thiết đặt.

3.4 Chạy 1 migration bất kì

Nếu bạn muốn chạy 1 migration với up hoặc down, ta rất có thể cần sử dụng db:migrate:up cùng db:migrate:down. Và thêm version đằng sau để xác minh sẽ là file migration nào

3.5 Chạy migration bên trên những môi trường khác nhau

Mặc đinch nếu chạy db:migrate nó sẽ điều khiển xe trên môi trường development. Nếu bạn muốn nó điều khiển xe trên các môi trường xung quanh không giống thì chỉ cần thêm đổi mới môi trường xung quanh vào đằng tiếp nối là RAILS_ENV. Tại phía trên mình muốn chạy migrate bên trên môi trường 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 ở trong tính của đối tượng người dùng Active sầu Record có. Những đọc tin này nó không tồn tại vào code Mã Sản Phẩm với trải qua các migration nó được tạo thành.

4.2 Các các loại Schema Dump

Có 2 phương pháp nhằm Dump schema. Cách dump thì được setting vào tệp tin config/application.rb của config.active_record.schema_format. Chỉ định sql Hay là :rubyNếu chỉ định và hướng dẫn :ruby thì schema sẽ được lưu giữ ngơi nghỉ db/schema.rb. Mlàm việc file này có chắc chắn là có thể bắt gặp giống hệt như là một trong bảng migration Khủng.

class AddInitialProducts Để thêm dữ liệu sau khi database được tạo ra. Rails bao gồm một chức năng hoàn toàn có thể giúp quá trình này trlàm việc đề xuất gấp rút. Bằng cách thêm code vào db/seeds.rb và 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à xong rồi. Hi vọng nội dung bài viết hoàn toàn có thể mang lại lợi ích cho chính mình, khiến cho bạn phát âm hơn về migration.!

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