Tìm Hiểu Về Migration

Có phải bạn đang tìm kiếm chủ đề về => Tìm Hiểu Về Migration phải ko? Nếu đúng tương tự thì mời bạn xem nó ngay tại đây. Xem thêm các bài viết hay khác tại đây => Tin Tức

Migration là một tính năng của Active record cho phép bạn thay đổi cả cấu trúc và dữ liệu trong cơ sở dữ liệu. Thay vì thực hiện các thay đổi đối với cơ sở dữ liệu trực tiếp, Rails cho phép bạn sử dụng Ruby DSL để mô tả các thay đổi đối với các bảng. Gần đây, dự án của tôi gặp sự cố vận chuyển nên tôi viết bài này. Vấn đề là Người mua muốn lùi quá trình vận chuyển tới một thời khắc nhất mực chỉ để chạy mã trong một phiên bản nhất mực, ko phải mã ngày nay. Và lúc đó, chúng tôi đã rollback nhưng lại bị lỗi rollback, nhưng ko người nào nghĩ tới trường hợp đó trong quá trình code. Đó cũng là một vấn đề nhưng mà chúng ta cần hiểu rõ hơn về vấn đề di trú để tránh những trường hợp tương tự. Sau lúc đọc bài viết bạn có thể biết thêm về:

  • Tìm hiểu về quá trình vận chuyển, cách tạo
  • Các cách chạy vận chuyển, khôi phục chúng
  • Hiểu thêm về sơ đồ

1. Sơ lượt

Vận chuyển là một cách thuận tiện để thay đổi cấu trúc bảng và dữ liệu trong cơ sở dữ liệu một cách dễ dàng. Bằng cách sử dụng Ruby DSL, bạn ko cần phải viết SQL bằng tay, nó có thể giúp bạn thay đổi cơ sở dữ liệu một cách độc lập Hãy tưởng tượng mỗi lần vận chuyển tương ứng với một phiên bản của cơ sở dữ liệu. Ban sơ, giản đồ trống và mỗi lần vận chuyển được sửa đổi để thêm hoặc xóa bảng, cột hoặc hàng. Bản ghi hoạt động biết cách cập nhật sơ đồ theo thời kì. Và từ bất kỳ thời khắc nào trong quá khứ, có thể cập nhật phiên bản của sơ đồ lên phiên bản mới nhất. Bản ghi hoạt động cũng sẽ cập nhật tệp db / hoigi.info để làm cho tệp thích hợp với cấu trúc mới nhất của cơ sở dữ liệu. Hãy xem một ví dụ về sự vận chuyển:

Bạn đang xem: di trú là gì

class CreateProducts

Đây là một chuyển đổi tạo bảng thành phầm trong cơ sở dữ liệu. Có 2 trường là tên và mô tả. Một cột khóa chính id cũng sẽ được thêm vào sau lúc chạy quá trình vận chuyển này, đây là khóa chính mặc định cho tất cả các mẫu hình Bản ghi Hoạt động. dấu thời kì sẽ thêm 2 cột vào bảng: create_at và updated_at. Các cột này sẽ được ActiveRecord quản lý tự động nếu chúng tồn tại Trước lúc thực hiện vận chuyển, ko có bảng nào tồn tại. Chạy quá trình vận chuyển và bảng sẽ được tạo. Và Active record cũng có cách sao lưu lần vận chuyển trước bằng cách lùi lần vận chuyển đó, bảng đã tạo trước đó sẽ bị xóa. Chúng tôi cũng có thể viết chuyển đổi theo một cách khác để hiểu cách nó quay trở lại:

class ChangeProductsPrice

hoigi.info là để chạy quá trình vận chuyển. hoigi.info là chạy lại quá trình quay lại thời kì trước lúc vận chuyển. Ví dụ: nếu chúng ta change_column, thì quá trình khôi phục sẽ ko thành công, buộc chúng ta phải viết mã theo cách này.

2. Tạo vận chuyển

2.1 Tạo vận chuyển

Quá trình vận chuyển được lưu dưới dạng tệp tại db / migrate. Tên của các tệp vận chuyển sẽ có dạng hoigi.info. Tên tệp với thời kì để phân biệt các phiên bản vận chuyển. Ví dụ: nếu tên tệp là hoigi.info, thì lớp CreateProducts phải được khái niệm. Rails sử dụng dấu thời kì này để xác định quá trình vận chuyển nào cần được chạy và theo trật tự, vì vậy nếu bạn đang sao chép các quá trình vận chuyển từ một ứng dụng khác hoặc tự tạo một tệp, hãy xem xét vị trí của nó. Đơn hàng. Và tất nhiên, mỗi lúc tạo một lần vận chuyển, chúng ta ko thể ngồi tính toán thời kì để tạo ra file dc. Active Record hỗ trợ một cách đơn giản, dễ dàng để tạo:

$ bin / rails tạo vận chuyển AddPartNumberToProducts

Lệnh sẽ tạo một chuyển đổi mới:

lớp AddPartNumberToProducts

Nếu tên vận chuyển có dạng “AddXXXToYYY” hoặc “RemoveXXXFromYYY” sẽ tạo ra các vận chuyển add_column hoặc remove_column. Bạn có thể thêm các cột và kiểu của chúng như sau:

$ bin / rails tạo vận chuyển AddPartNumberToProducts part_number: string

sẽ tạo ra:

lớp AddPartNumberToProducts

Các vận chuyển có tên trong biểu mẫu CreateXXX và theo sau là danh sách tên cột và loại của chúng sẽ tạo một bảng có tên XXX với các cột được liệt kê. Ví dụ:

$ bin / rails tạo vận chuyển CreateProducts name: string part_number: string

Sẽ tạo ra các lần vận chuyển:

class CreateProducts

2.2 Tạo mẫu hình

Tham khảo: Ý nghĩa và cách dùng của Turn out trong tiếng Anh là gì?

Lúc tạo một mẫu hình, bạn có thể tạo các chuyển đổi cho thích hợp. Ví dụ: chúng tôi tạo một mẫu hình mới có tên Thành phầm.

$ bin / rails tạo mẫu hình Tên thành phầm: chuỗi mô tả: văn bản

Nó sẽ tạo ra một quá trình vận chuyển mới như thế này:

class CreateProducts

Bạn có thể thêm nhiều cột hơn nếu bạn muốn 😃)

3. Chạy quá trình vận chuyển

Rails hỗ trợ một tập trung các tác vụ bin / rails để chạy quá trình vận chuyển. Lệnh trước nhất chúng tôi sử dụng nhiều nhất là rails db: migrate. Ở đây nó chỉ chạy các vận chuyển ko chạy ,. vận chuyển chạy sau đó nó sẽ ko chạy lại. Nó sẽ chạy theo trình tự thời kì Xem xét rằng lúc chạy db: migrate nó cũng sẽ tự động chạy db: schema: dump để cập nhật tệp db / hoigi.info cho thích hợp với cấu trúc cơ sở dữ liệu của bạn Nếu bạn muốn chạy 1 lần vận chuyển cụ thể. Chúng tôi có thể chạy nó bằng cách lấy tên phiên bản dưới dạng một chuỗi số dài trong tệp vận chuyển và chạy:

$ bin / rails db: vận chuyển VERSION = 20080906120000

Nếu phiên bản 20080906120000 lớn hơn phiên bản ngày nay, nó sẽ chạy các thay đổi (phương pháp up) của tất cả các lần vận chuyển bao gồm cả 20080906120000 và sẽ ko chạy bất kỳ quá trình vận chuyển nào sau đó.

3.1 Lăn trở lại

Rollback được sử dụng lúc chúng ta tạo một lần vận chuyển sai và muốn sửa chúng, muốn khôi phục tại thời khắc chạy lần vận chuyển lỗi đó. Chúng tôi có thể khôi phục quá trình vận chuyển trước đó bằng cách:

$ bin / rails db: rollback

Nó sẽ khôi phục tại thời khắc gần nhất của quá trình vận chuyển, nếu bạn muốn khôi phục nhiều phiên bản trước đó, hãy chỉ định thông số STEP. Ví dụ:

$ bin / rails db: rollback STEP = 3

Nó sẽ hoàn nguyên 3 lần vận chuyển cuối cùng. Chúng tôi sử dụng db: migrate: redo để chạy quay lại và vận chuyển lại:

$ bin / rails db: migrate: redo STEP = 3

Dưới đây là những cách giúp chúng tôi thay đổi quá trình vận chuyển nhưng mà ko cần phải đặt lại quá trình vận chuyển.

Một xem xét lúc tạo vận chuyển chúng ta nên rà soát xem nó có thể rollback được hay ko nhé ^^. Có thể nó sẽ ko khôi phục do nhiều lý do không giống nhau. Ví dụ: change_column sẽ ko khôi phục dc hoặc lúc chúng ta thêm các điều kiện để chạy quá trình vận chuyển.

3.2 Setup cơ sở dữ liệu

Tham khảo: OpenGL là gì? OpenGL làm gì? | Hỏi gì?

Xem thêm thông tin hay:  Kí Tự đặc Biệt Gạch Chéo

Chúng tôi sử dụng db: setup sẽ giúp tạo cơ sở dữ liệu và tải sơ đồ và khởi tạo chúng bằng hạt giống.

3.3 Đặt lại cơ sở dữ liệu

Sử dụng db: đặt lại để dropdatabase và thiết đặt lại nó. Nó tương đương với 2 câu lệnh: db: drop và db: setup.

3.4 Chạy 1 lần vận chuyển bất kỳ

Nếu bạn muốn vận chuyển lên hoặc xuống, bạn có thể sử dụng db: migrate: up và db: migrate: xuống. Và thêm phiên bản sau để xác định tệp vận chuyển đó là

$ bin / rails db: migrate: up VERSION = 20080906120000

sẽ chạy 20080906120000 với các thay đổi (phương pháp lên). Nó cũng rà soát xem quá trình vận chuyển này đã chạy hay chưa và sẽ ko làm gì nếu Active Record xác định nó đã được chạy

3.5 Chạy vận chuyển trên các môi trường không giống nhau

Theo mặc định, nếu bạn chạy db: migrate, nó sẽ chạy trên môi trường tăng trưởng. Nếu bạn muốn nó chạy trên các môi trường khác, chỉ cần thêm một biến môi trường theo sau là RAILS_ENV. Ở đây tôi muốn chạy vận chuyển trên môi trường thử nghiệm:

$ bin / rails db: migrate RAILS_ENV = test

4. Sơ đồ

4.1 Mục tiêu

Tệp sơ đồ sẽ giúp bạn biết nhân vật Active Record có những tính chất nào. Thông tin này ko có trong mã mẫu hình và thông qua quá trình vận chuyển, thông tin này được tạo ra.

4.2 Các kiểu kết xuất sơ đồ

Có 2 phương pháp để Dump giản đồ. Phương thức kết xuất được đặt trong tệp config / hoigi.info của hoigi.infoma_format. Chỉ định sql hoặc: ruby ​​Nếu: ruby ​​được chỉ định, sơ đồ sẽ được lưu trữ trong db / schema.rb. Mở tệp này cứng cáp có thể thấy những gì trông giống như một bảng vận chuyển lớn.

ActiveRecord :: Schema.define (phiên bản: 20080906171750) tạo “tác giả” cho create_table, force: true do | t | t.string “name” t.datetime “create_at” t.datetime “updated_at” end create_table “products”, force: true do | t | t.string “name” t.text “description” t.datetime “create_at” t.datetime “updated_at” t.string “part_number” end end

5. Dữ liệu vận chuyển và hạt giống

Vận chuyển có thể được sử dụng để thêm hoặc thay đổi dữ liệu. Nó rất hữu ích với cơ sở dữ liệu đã tồn tại và ko thể xóa hoặc tạo lại, chẳng hạn như cơ sở dữ liệu sản xuất. Chúng ta có thể viết như sau:

class AddInitialProducts

Để thêm dữ liệu sau lúc cơ sở dữ liệu được tạo. Rails có một tính năng có thể làm cho quá trình này diễn ra nhanh chóng. Bằng cách thêm mã vào db / hoigi.info và chạy rails db: seed.

5. thời kì làm | i | hoigi.infote (tên: “Thành phầm ## {i}”, mô tả: “Một thành phầm.”) kết thúc

Bài viết này kết thúc ở đây. Kỳ vọng bài viết có thể giúp ích cho bạn, giúp bạn hiểu thêm về di trú.!

Nguồn tham khảo: hoigi.info/active_record_migrations.html#changed-existing-migrations

Tham khảo: Câu khai báo đơn giản là gì | Hỏi gì?


Thông tin thêm

Tìm Hiểu Về Migration

Migration là một tính năng của Active record cho phép bạn thay đổi cả cấu trúc và dữ liệu trong cơ sở dữ liệu. Thay vì thực hiện các thay đổi đối với cơ sở dữ liệu trực tiếp, Rails cho phép bạn sử dụng Ruby DSL để mô tả các thay đổi đối với các bảng. Gần đây, dự án của tôi gặp sự cố vận chuyển nên tôi viết bài này. Vấn đề là Người mua muốn lùi quá trình vận chuyển tới một thời khắc nhất mực chỉ để chạy mã trong một phiên bản nhất mực, ko phải mã ngày nay. Và lúc đó, chúng tôi đã rollback nhưng lại bị lỗi rollback, nhưng ko người nào nghĩ tới trường hợp đó trong quá trình code. Đó cũng là một vấn đề nhưng mà chúng ta cần hiểu rõ hơn về vấn đề di trú để tránh những trường hợp tương tự. Sau lúc đọc bài viết bạn có thể biết thêm về:

  • Tìm hiểu về quá trình vận chuyển, cách tạo
  • Các cách chạy vận chuyển, khôi phục chúng
  • Hiểu thêm về sơ đồ

1. Sơ lượt

Vận chuyển là một cách thuận tiện để thay đổi cấu trúc bảng và dữ liệu trong cơ sở dữ liệu một cách dễ dàng. Bằng cách sử dụng Ruby DSL, bạn ko cần phải viết SQL bằng tay, nó có thể giúp bạn thay đổi cơ sở dữ liệu một cách độc lập Hãy tưởng tượng mỗi lần vận chuyển tương ứng với một phiên bản của cơ sở dữ liệu. Ban sơ, giản đồ trống và mỗi lần vận chuyển được sửa đổi để thêm hoặc xóa bảng, cột hoặc hàng. Bản ghi hoạt động biết cách cập nhật sơ đồ theo thời kì. Và từ bất kỳ thời khắc nào trong quá khứ, có thể cập nhật phiên bản của sơ đồ lên phiên bản mới nhất. Bản ghi hoạt động cũng sẽ cập nhật tệp db / hoigi.info để làm cho tệp thích hợp với cấu trúc mới nhất của cơ sở dữ liệu. Hãy xem một ví dụ về sự vận chuyển:

Bạn đang xem: di trú là gì

class CreateProducts

Đây là một chuyển đổi tạo bảng thành phầm trong cơ sở dữ liệu. Có 2 trường là tên và mô tả. Một cột khóa chính id cũng sẽ được thêm vào sau lúc chạy quá trình vận chuyển này, đây là khóa chính mặc định cho tất cả các mẫu hình Bản ghi Hoạt động. dấu thời kì sẽ thêm 2 cột vào bảng: create_at và updated_at. Các cột này sẽ được ActiveRecord quản lý tự động nếu chúng tồn tại Trước lúc thực hiện vận chuyển, ko có bảng nào tồn tại. Chạy quá trình vận chuyển và bảng sẽ được tạo. Và Active record cũng có cách sao lưu lần vận chuyển trước bằng cách lùi lần vận chuyển đó, bảng đã tạo trước đó sẽ bị xóa. Chúng tôi cũng có thể viết chuyển đổi theo một cách khác để hiểu cách nó quay trở lại:

class ChangeProductsPrice

hoigi.info là để chạy quá trình vận chuyển. hoigi.info là chạy lại quá trình quay lại thời kì trước lúc vận chuyển. Ví dụ: nếu chúng ta change_column, thì quá trình khôi phục sẽ ko thành công, buộc chúng ta phải viết mã theo cách này.

2. Tạo vận chuyển

2.1 Tạo vận chuyển

Quá trình vận chuyển được lưu dưới dạng tệp tại db / migrate. Tên của các tệp vận chuyển sẽ có dạng hoigi.info. Tên tệp với thời kì để phân biệt các phiên bản vận chuyển. Ví dụ: nếu tên tệp là hoigi.info, thì lớp CreateProducts phải được khái niệm. Rails sử dụng dấu thời kì này để xác định quá trình vận chuyển nào cần được chạy và theo trật tự, vì vậy nếu bạn đang sao chép các quá trình vận chuyển từ một ứng dụng khác hoặc tự tạo một tệp, hãy xem xét vị trí của nó. Đơn hàng. Và tất nhiên, mỗi lúc tạo một lần vận chuyển, chúng ta ko thể ngồi tính toán thời kì để tạo ra file dc. Active Record hỗ trợ một cách đơn giản, dễ dàng để tạo:

$ bin / rails tạo vận chuyển AddPartNumberToProducts

Lệnh sẽ tạo một chuyển đổi mới:

lớp AddPartNumberToProducts

Nếu tên vận chuyển có dạng “AddXXXToYYY” hoặc “RemoveXXXFromYYY” sẽ tạo ra các vận chuyển add_column hoặc remove_column. Bạn có thể thêm các cột và kiểu của chúng như sau:

$ bin / rails tạo vận chuyển AddPartNumberToProducts part_number: string

sẽ tạo ra:

lớp AddPartNumberToProducts

Các vận chuyển có tên trong biểu mẫu CreateXXX và theo sau là danh sách tên cột và loại của chúng sẽ tạo một bảng có tên XXX với các cột được liệt kê. Ví dụ:

$ bin / rails tạo vận chuyển CreateProducts name: string part_number: string

Sẽ tạo ra các lần vận chuyển:

class CreateProducts

2.2 Tạo mẫu hình

Tham khảo: Ý nghĩa và cách dùng của Turn out trong tiếng Anh là gì?

Lúc tạo một mẫu hình, bạn có thể tạo các chuyển đổi cho thích hợp. Ví dụ: chúng tôi tạo một mẫu hình mới có tên Thành phầm.

$ bin / rails tạo mẫu hình Tên thành phầm: chuỗi mô tả: văn bản

Nó sẽ tạo ra một quá trình vận chuyển mới như thế này:

class CreateProducts

Bạn có thể thêm nhiều cột hơn nếu bạn muốn 😃)

3. Chạy quá trình vận chuyển

Rails hỗ trợ một tập trung các tác vụ bin / rails để chạy quá trình vận chuyển. Lệnh trước nhất chúng tôi sử dụng nhiều nhất là rails db: migrate. Ở đây nó chỉ chạy các vận chuyển ko chạy ,. vận chuyển chạy sau đó nó sẽ ko chạy lại. Nó sẽ chạy theo trình tự thời kì Xem xét rằng lúc chạy db: migrate nó cũng sẽ tự động chạy db: schema: dump để cập nhật tệp db / hoigi.info cho thích hợp với cấu trúc cơ sở dữ liệu của bạn Nếu bạn muốn chạy 1 lần vận chuyển cụ thể. Chúng tôi có thể chạy nó bằng cách lấy tên phiên bản dưới dạng một chuỗi số dài trong tệp vận chuyển và chạy:

$ bin / rails db: vận chuyển VERSION = 20080906120000

Nếu phiên bản 20080906120000 lớn hơn phiên bản ngày nay, nó sẽ chạy các thay đổi (phương pháp up) của tất cả các lần vận chuyển bao gồm cả 20080906120000 và sẽ ko chạy bất kỳ quá trình vận chuyển nào sau đó.

3.1 Lăn trở lại

Rollback được sử dụng lúc chúng ta tạo một lần vận chuyển sai và muốn sửa chúng, muốn khôi phục tại thời khắc chạy lần vận chuyển lỗi đó. Chúng tôi có thể khôi phục quá trình vận chuyển trước đó bằng cách:

$ bin / rails db: rollback

Nó sẽ khôi phục tại thời khắc gần nhất của quá trình vận chuyển, nếu bạn muốn khôi phục nhiều phiên bản trước đó, hãy chỉ định thông số STEP. Ví dụ:

$ bin / rails db: rollback STEP = 3

Nó sẽ hoàn nguyên 3 lần vận chuyển cuối cùng. Chúng tôi sử dụng db: migrate: redo để chạy quay lại và vận chuyển lại:

$ bin / rails db: migrate: redo STEP = 3

Dưới đây là những cách giúp chúng tôi thay đổi quá trình vận chuyển nhưng mà ko cần phải đặt lại quá trình vận chuyển.

Một xem xét lúc tạo vận chuyển chúng ta nên rà soát xem nó có thể rollback được hay ko nhé ^^. Có thể nó sẽ ko khôi phục do nhiều lý do không giống nhau. Ví dụ: change_column sẽ ko khôi phục dc hoặc lúc chúng ta thêm các điều kiện để chạy quá trình vận chuyển.

3.2 Setup cơ sở dữ liệu

Tham khảo: OpenGL là gì? OpenGL làm gì? | Hỏi gì?

Chúng tôi sử dụng db: setup sẽ giúp tạo cơ sở dữ liệu và tải sơ đồ và khởi tạo chúng bằng hạt giống.

3.3 Đặt lại cơ sở dữ liệu

Sử dụng db: đặt lại để dropdatabase và thiết đặt lại nó. Nó tương đương với 2 câu lệnh: db: drop và db: setup.

3.4 Chạy 1 lần vận chuyển bất kỳ

Nếu bạn muốn vận chuyển lên hoặc xuống, bạn có thể sử dụng db: migrate: up và db: migrate: xuống. Và thêm phiên bản sau để xác định tệp vận chuyển đó là

$ bin / rails db: migrate: up VERSION = 20080906120000

sẽ chạy 20080906120000 với các thay đổi (phương pháp lên). Nó cũng rà soát xem quá trình vận chuyển này đã chạy hay chưa và sẽ ko làm gì nếu Active Record xác định nó đã được chạy

3.5 Chạy vận chuyển trên các môi trường không giống nhau

Theo mặc định, nếu bạn chạy db: migrate, nó sẽ chạy trên môi trường tăng trưởng. Nếu bạn muốn nó chạy trên các môi trường khác, chỉ cần thêm một biến môi trường theo sau là RAILS_ENV. Ở đây tôi muốn chạy vận chuyển trên môi trường thử nghiệm:

$ bin / rails db: migrate RAILS_ENV = test

4. Sơ đồ

4.1 Mục tiêu

Tệp sơ đồ sẽ giúp bạn biết nhân vật Active Record có những tính chất nào. Thông tin này ko có trong mã mẫu hình và thông qua quá trình vận chuyển, thông tin này được tạo ra.

4.2 Các kiểu kết xuất sơ đồ

Có 2 phương pháp để Dump giản đồ. Phương thức kết xuất được đặt trong tệp config / hoigi.info của hoigi.infoma_format. Chỉ định sql hoặc: ruby ​​Nếu: ruby ​​được chỉ định, sơ đồ sẽ được lưu trữ trong db / schema.rb. Mở tệp này cứng cáp có thể thấy những gì trông giống như một bảng vận chuyển lớn.

ActiveRecord :: Schema.define (phiên bản: 20080906171750) tạo “tác giả” cho create_table, force: true do | t | t.string “name” t.datetime “create_at” t.datetime “updated_at” end create_table “products”, force: true do | t | t.string “name” t.text “description” t.datetime “create_at” t.datetime “updated_at” t.string “part_number” end end

5. Dữ liệu vận chuyển và hạt giống

Vận chuyển có thể được sử dụng để thêm hoặc thay đổi dữ liệu. Nó rất hữu ích với cơ sở dữ liệu đã tồn tại và ko thể xóa hoặc tạo lại, chẳng hạn như cơ sở dữ liệu sản xuất. Chúng ta có thể viết như sau:

class AddInitialProducts

Để thêm dữ liệu sau lúc cơ sở dữ liệu được tạo. Rails có một tính năng có thể làm cho quá trình này diễn ra nhanh chóng. Bằng cách thêm mã vào db / hoigi.info và chạy rails db: seed.

5. thời kì làm | i | hoigi.infote (tên: “Thành phầm ## {i}”, mô tả: “Một thành phầm.”) kết thúc

Bài viết này kết thúc ở đây. Kỳ vọng bài viết có thể giúp ích cho bạn, giúp bạn hiểu thêm về di trú.!

Nguồn tham khảo: hoigi.info/active_record_migrations.html#changed-existing-migrations

Tham khảo: Câu khai báo đơn giản là gì | Hỏi gì?


Migration là một tính năng của Active record cho phép bạn thay đổi cả cấu trúc và dữ liệu trong cơ sở dữ liệu. Thay vì thực hiện các thay đổi đối với cơ sở dữ liệu trực tiếp, Rails cho phép bạn sử dụng Ruby DSL để mô tả các thay đổi đối với các bảng. Gần đây, dự án của tôi gặp sự cố vận chuyển nên tôi viết bài này. Vấn đề là Người mua muốn lùi quá trình vận chuyển tới một thời khắc nhất mực chỉ để chạy mã trong một phiên bản nhất mực, ko phải mã ngày nay. Và lúc đó, chúng tôi đã rollback nhưng lại bị lỗi rollback, nhưng ko người nào nghĩ tới trường hợp đó trong quá trình code. Đó cũng là một vấn đề nhưng mà chúng ta cần hiểu rõ hơn về vấn đề di trú để tránh những trường hợp tương tự. Sau lúc đọc bài viết bạn có thể biết thêm về:

  • Tìm hiểu về quá trình vận chuyển, cách tạo
  • Các cách chạy vận chuyển, khôi phục chúng
  • Hiểu thêm về sơ đồ

1. Sơ lượt

Vận chuyển là một cách thuận tiện để thay đổi cấu trúc bảng và dữ liệu trong cơ sở dữ liệu một cách dễ dàng. Bằng cách sử dụng Ruby DSL, bạn ko cần phải viết SQL bằng tay, nó có thể giúp bạn thay đổi cơ sở dữ liệu một cách độc lập Hãy tưởng tượng mỗi lần vận chuyển tương ứng với một phiên bản của cơ sở dữ liệu. Ban sơ, giản đồ trống và mỗi lần vận chuyển được sửa đổi để thêm hoặc xóa bảng, cột hoặc hàng. Bản ghi hoạt động biết cách cập nhật sơ đồ theo thời kì. Và từ bất kỳ thời khắc nào trong quá khứ, có thể cập nhật phiên bản của sơ đồ lên phiên bản mới nhất. Bản ghi hoạt động cũng sẽ cập nhật tệp db / hoigi.info để làm cho tệp thích hợp với cấu trúc mới nhất của cơ sở dữ liệu. Hãy xem một ví dụ về sự vận chuyển:

Bạn đang xem: di trú là gì

class CreateProducts

Đây là một chuyển đổi tạo bảng thành phầm trong cơ sở dữ liệu. Có 2 trường là tên và mô tả. Một cột khóa chính id cũng sẽ được thêm vào sau lúc chạy quá trình vận chuyển này, đây là khóa chính mặc định cho tất cả các mẫu hình Bản ghi Hoạt động. dấu thời kì sẽ thêm 2 cột vào bảng: create_at và updated_at. Các cột này sẽ được ActiveRecord quản lý tự động nếu chúng tồn tại Trước lúc thực hiện vận chuyển, ko có bảng nào tồn tại. Chạy quá trình vận chuyển và bảng sẽ được tạo. Và Active record cũng có cách sao lưu lần vận chuyển trước bằng cách lùi lần vận chuyển đó, bảng đã tạo trước đó sẽ bị xóa. Chúng tôi cũng có thể viết chuyển đổi theo một cách khác để hiểu cách nó quay trở lại:

class ChangeProductsPrice

hoigi.info là để chạy quá trình vận chuyển. hoigi.info là chạy lại quá trình quay lại thời kì trước lúc vận chuyển. Ví dụ: nếu chúng ta change_column, thì quá trình khôi phục sẽ ko thành công, buộc chúng ta phải viết mã theo cách này.

2. Tạo vận chuyển

2.1 Tạo vận chuyển

Quá trình vận chuyển được lưu dưới dạng tệp tại db / migrate. Tên của các tệp vận chuyển sẽ có dạng hoigi.info. Tên tệp với thời kì để phân biệt các phiên bản vận chuyển. Ví dụ: nếu tên tệp là hoigi.info, thì lớp CreateProducts phải được khái niệm. Rails sử dụng dấu thời kì này để xác định quá trình vận chuyển nào cần được chạy và theo trật tự, vì vậy nếu bạn đang sao chép các quá trình vận chuyển từ một ứng dụng khác hoặc tự tạo một tệp, hãy xem xét vị trí của nó. Đơn hàng. Và tất nhiên, mỗi lúc tạo một lần vận chuyển, chúng ta ko thể ngồi tính toán thời kì để tạo ra file dc. Active Record hỗ trợ một cách đơn giản, dễ dàng để tạo:

$ bin / rails tạo vận chuyển AddPartNumberToProducts

Lệnh sẽ tạo một chuyển đổi mới:

lớp AddPartNumberToProducts

Nếu tên vận chuyển có dạng “AddXXXToYYY” hoặc “RemoveXXXFromYYY” sẽ tạo ra các vận chuyển add_column hoặc remove_column. Bạn có thể thêm các cột và kiểu của chúng như sau:

$ bin / rails tạo vận chuyển AddPartNumberToProducts part_number: string

sẽ tạo ra:

lớp AddPartNumberToProducts

Các vận chuyển có tên trong biểu mẫu CreateXXX và theo sau là danh sách tên cột và loại của chúng sẽ tạo một bảng có tên XXX với các cột được liệt kê. Ví dụ:

$ bin / rails tạo vận chuyển CreateProducts name: string part_number: string

Sẽ tạo ra các lần vận chuyển:

class CreateProducts

2.2 Tạo mẫu hình

Tham khảo: Ý nghĩa và cách dùng của Turn out trong tiếng Anh là gì?

Lúc tạo một mẫu hình, bạn có thể tạo các chuyển đổi cho thích hợp. Ví dụ: chúng tôi tạo một mẫu hình mới có tên Thành phầm.

$ bin / rails tạo mẫu hình Tên thành phầm: chuỗi mô tả: văn bản

Nó sẽ tạo ra một quá trình vận chuyển mới như thế này:

class CreateProducts

Bạn có thể thêm nhiều cột hơn nếu bạn muốn 😃)

3. Chạy quá trình vận chuyển

Rails hỗ trợ một tập trung các tác vụ bin / rails để chạy quá trình vận chuyển. Lệnh trước nhất chúng tôi sử dụng nhiều nhất là rails db: migrate. Ở đây nó chỉ chạy các vận chuyển ko chạy ,. vận chuyển chạy sau đó nó sẽ ko chạy lại. Nó sẽ chạy theo trình tự thời kì Xem xét rằng lúc chạy db: migrate nó cũng sẽ tự động chạy db: schema: dump để cập nhật tệp db / hoigi.info cho thích hợp với cấu trúc cơ sở dữ liệu của bạn Nếu bạn muốn chạy 1 lần vận chuyển cụ thể. Chúng tôi có thể chạy nó bằng cách lấy tên phiên bản dưới dạng một chuỗi số dài trong tệp vận chuyển và chạy:

$ bin / rails db: vận chuyển VERSION = 20080906120000

Nếu phiên bản 20080906120000 lớn hơn phiên bản ngày nay, nó sẽ chạy các thay đổi (phương pháp up) của tất cả các lần vận chuyển bao gồm cả 20080906120000 và sẽ ko chạy bất kỳ quá trình vận chuyển nào sau đó.

3.1 Lăn trở lại

Rollback được sử dụng lúc chúng ta tạo một lần vận chuyển sai và muốn sửa chúng, muốn khôi phục tại thời khắc chạy lần vận chuyển lỗi đó. Chúng tôi có thể khôi phục quá trình vận chuyển trước đó bằng cách:

$ bin / rails db: rollback

Nó sẽ khôi phục tại thời khắc gần nhất của quá trình vận chuyển, nếu bạn muốn khôi phục nhiều phiên bản trước đó, hãy chỉ định thông số STEP. Ví dụ:

$ bin / rails db: rollback STEP = 3

Nó sẽ hoàn nguyên 3 lần vận chuyển cuối cùng. Chúng tôi sử dụng db: migrate: redo để chạy quay lại và vận chuyển lại:

$ bin / rails db: migrate: redo STEP = 3

Dưới đây là những cách giúp chúng tôi thay đổi quá trình vận chuyển nhưng mà ko cần phải đặt lại quá trình vận chuyển.

Một xem xét lúc tạo vận chuyển chúng ta nên rà soát xem nó có thể rollback được hay ko nhé ^^. Có thể nó sẽ ko khôi phục do nhiều lý do không giống nhau. Ví dụ: change_column sẽ ko khôi phục dc hoặc lúc chúng ta thêm các điều kiện để chạy quá trình vận chuyển.

3.2 Setup cơ sở dữ liệu

Tham khảo: OpenGL là gì? OpenGL làm gì? | Hỏi gì?

Chúng tôi sử dụng db: setup sẽ giúp tạo cơ sở dữ liệu và tải sơ đồ và khởi tạo chúng bằng hạt giống.

3.3 Đặt lại cơ sở dữ liệu

Sử dụng db: đặt lại để dropdatabase và thiết đặt lại nó. Nó tương đương với 2 câu lệnh: db: drop và db: setup.

3.4 Chạy 1 lần vận chuyển bất kỳ

Nếu bạn muốn vận chuyển lên hoặc xuống, bạn có thể sử dụng db: migrate: up và db: migrate: xuống. Và thêm phiên bản sau để xác định tệp vận chuyển đó là

$ bin / rails db: migrate: up VERSION = 20080906120000

sẽ chạy 20080906120000 với các thay đổi (phương pháp lên). Nó cũng rà soát xem quá trình vận chuyển này đã chạy hay chưa và sẽ ko làm gì nếu Active Record xác định nó đã được chạy

3.5 Chạy vận chuyển trên các môi trường không giống nhau

Theo mặc định, nếu bạn chạy db: migrate, nó sẽ chạy trên môi trường tăng trưởng. Nếu bạn muốn nó chạy trên các môi trường khác, chỉ cần thêm một biến môi trường theo sau là RAILS_ENV. Ở đây tôi muốn chạy vận chuyển trên môi trường thử nghiệm:

$ bin / rails db: migrate RAILS_ENV = test

4. Sơ đồ

4.1 Mục tiêu

Tệp sơ đồ sẽ giúp bạn biết nhân vật Active Record có những tính chất nào. Thông tin này ko có trong mã mẫu hình và thông qua quá trình vận chuyển, thông tin này được tạo ra.

4.2 Các kiểu kết xuất sơ đồ

Có 2 phương pháp để Dump giản đồ. Phương thức kết xuất được đặt trong tệp config / hoigi.info của hoigi.infoma_format. Chỉ định sql hoặc: ruby ​​Nếu: ruby ​​được chỉ định, sơ đồ sẽ được lưu trữ trong db / schema.rb. Mở tệp này cứng cáp có thể thấy những gì trông giống như một bảng vận chuyển lớn.

ActiveRecord :: Schema.define (phiên bản: 20080906171750) tạo “tác giả” cho create_table, force: true do | t | t.string “name” t.datetime “create_at” t.datetime “updated_at” end create_table “products”, force: true do | t | t.string “name” t.text “description” t.datetime “create_at” t.datetime “updated_at” t.string “part_number” end end

5. Dữ liệu vận chuyển và hạt giống

Vận chuyển có thể được sử dụng để thêm hoặc thay đổi dữ liệu. Nó rất hữu ích với cơ sở dữ liệu đã tồn tại và ko thể xóa hoặc tạo lại, chẳng hạn như cơ sở dữ liệu sản xuất. Chúng ta có thể viết như sau:

class AddInitialProducts

Để thêm dữ liệu sau lúc cơ sở dữ liệu được tạo. Rails có một tính năng có thể làm cho quá trình này diễn ra nhanh chóng. Bằng cách thêm mã vào db / hoigi.info và chạy rails db: seed.

5. thời kì làm | i | hoigi.infote (tên: “Thành phầm ## {i}”, mô tả: “Một thành phầm.”) kết thúc

Bài viết này kết thúc ở đây. Kỳ vọng bài viết có thể giúp ích cho bạn, giúp bạn hiểu thêm về di trú.!

Nguồn tham khảo: hoigi.info/active_record_migrations.html#changed-existing-migrations

Tham khảo: Câu khai báo đơn giản là gì | Hỏi gì?

#Tìm #Hiểu #Về #Migration

[rule_3_plain]

#Tìm #Hiểu #Về #Migration

[rule_1_plain]

#Tìm #Hiểu #Về #Migration

[rule_2_plain]

#Tìm #Hiểu #Về #Migration

[rule_2_plain]

#Tìm #Hiểu #Về #Migration

[rule_3_plain]

#Tìm #Hiểu #Về #Migration

[rule_1_plain]

Nguồn: besttaichinh.com

#Tìm #Hiểu #Về #Migration

Best Tài Chính
Best Tài Chínhhttp://besttaichinh.com
Là người sáng lập Website BestTaiChinh.Com - Với nhiều năm kinh nghiệm trong lĩnh vực tài chính ngân hàng, Bitcoin, chứng khoáng ... sẽ sử dụng các kiến thức được tổng hợp và đúc kết để cung cấp đến các bạn những thông tin chính xác, tư vấn hỗ trợ xử lý các dịch vụ tài chính, ngân hàng, bảo hiểm, đầu tư hiệu quả nhất!

Similar Articles

Comments

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

Advertisment

Phổ biến nhất