Hiển thị di chuyển đang chờ xử lý trong đường ray


Câu trả lời:


258

rake db:migrate:status(Rails 3 đến 5) hoặc rails db:migrate:status(Rails 5) sẽ thực hiện điều này. Xem cam kết này .

upcó nghĩa là di chuyển đã được chạy. downcó nghĩa là di chuyển đã không được chạy.


Tôi đang đi Don't know how to build task 'db:migrate:status'trên đường ray 3.2.8
Peter Ehrlich

1
@PeterEhrlich: Nó không hiển thị rake -Tnhưng những người khác làm gì?
jrdioko

2
bó exec rake db: di chuyển: trạng thái
Nadeem Yasin

2
Làm thế nào để bạn đọc đầu ra của lệnh này? Nếu trạng thái của một hàng là "xuống", điều đó có nghĩa là đó là một di chuyển đang chờ xử lý?
Dennis

12
upcó nghĩa là di chuyển đã được chạy. downcó nghĩa là di chuyển đã không được chạy.
Josh

37

rake db:abort_if_pending_migrations(ít nhất là trong Rails 2.3.3, không chắc chắn khi nó được giới thiệu). Mô tả cho biết 'Tăng lỗi nếu có các di chuyển đang chờ xử lý'. Điều này dường như được sử dụng nhiều hơn như một điều kiện tiên quyết cho các nhiệm vụ khác, nhưng tôi đoán bạn có thể sử dụng nó cho mục đích của mình.

EDIT: Đây là một ví dụ về đầu ra sau khi vừa tạo và không chạy di chuyển 'thử nghiệm'

rails_project theIV$ rake db:abort_if_pending_migrations
(in /Users/theIV/Sites/rails_project/)
You have 1 pending migrations:
  20090828200602 Test
Run "rake db:migrate" to update your database then try again.

Tôi thích thêm phần này để phối hợp các phụ thuộc giữa các thùng chứa đường ray
Vincent De Smet

Vẫn còn đó trong Rails 4.1.16
Magne

Hoạt động trên đường ray 5.1.3 cũng vậy
Wilson Silva

16

Lệnh này sẽ liệt kê tất cả các di chuyển với trạng thái của chúng ( UPhoặc DOWN)

Đường ray 3 và 4

rake db:migrate:status

Đường ray 5

rake db:migrate:status

# Or

rails db:migrate:status


6

Điều này làm việc cho đường ray 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2

Hãy thử rake -h (trợ giúp) và xem qua rake -n (= rake --dry-run). Vì vậy, có lẽ một cái gì đó như rake -n db: di chuyển sẽ giúp bạn có được những gì bạn muốn.


2
Điều đó sẽ không làm việc. Nó chỉ in: ** Gọi db: di chuyển (first_time) ** Gọi môi trường (first_time) ** Execute (chạy khô) môi trường ** Execute (chạy khô) db: di chuyển
jrdioko

2

Có thể không hoàn toàn là những gì OP đang yêu cầu, nhưng nếu bạn chỉ cần nhanh chóng kiểm tra xem có bất kỳ sự di chuyển nào đang chờ xử lý để sử dụng trong một nhiệm vụ cào không, mà không cần dùng đến

rake db: di chuyển: trạng thái | grep down (có thể không hoạt động nếu bạn đang ở trên Windows)

ActiveRecord :: Migration.check_pending! (tăng ActiveRecord :: PendingMigrationError mà bạn cần giải cứu)

bạn có thể sử dụng nhu cầu_migration? phương thức: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/ class


2
ActiveRecord::Migrator.needs_migration?trong Rails 5.1
niborg

1

Sau lệnh để kiểm tra trạng thái di chuyển:

rake db:migrate:status

HOẶC LÀ

Khi bạn chạy máy chủ của mình, nó sẽ hiển thị thông báo để chạy di chuyển đang chờ xử lý của bạn trước tiên.


1

Nếu bạn muốn xem có bao nhiêu di chuyển được thực hiện hoặc đang chờ xử lý, bạn có thể xem bằng cách sử dụng lệnh bên dưới.

rails db:migrate:status

Thông tin thêm về liên kết này: Rails Active Record Migration


1

Nếu bạn cần một bash one-liner để xác định có nên chạy di chuyển hay không (ví dụ: chỉ di chuyển trong lệnh giai đoạn phát hành Heroku khi có di chuyển đang chờ xử lý), điều này hoạt động:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.