Làm thế nào để chạy các tác vụ rake từ bảng điều khiển?


84

Tôi muốn gọi nhiệm vụ cào của mình từ bảng điều khiển. Nó có khả thi không? nếu có, làm thế nào để làm như vậy?

Tôi đã thử điều này trên bảng điều khiển:

require 'rake'
Rake::Task['my_task'].invoke

nhưng nó cho tôi lỗi này:

RuntimeError: Don't know how to build task

nó giống như cái cào không thể tìm thấy nhiệm vụ.

Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn bạn

Chỉnh sửa: Tôi đang sử dụng đường ray 2.3.5

Câu trả lời:


188

Chạy các nhiệm vụ Rake của bạn yêu cầu hai bước:

  1. Đang tải Rake
  2. Đang tải nhiệm vụ Cào của bạn

Bạn đang thiếu bước thứ hai.

Thông thường điều này được thực hiện trong Rakefile, nhưng bạn phải thực hiện thủ công tại đây:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke

2
Để có thêm tùy chọn, vui lòng tham khảo stackoverflow.com/questions/577944/…
Jahan

7
Bạn có thể muốn lưu ý sự khác biệt giữa nói .invoke.execute, nếu bạn cần chạy tác vụ nhiều lần (chẳng hạn như trình kiểm tra độ sạch dữ liệu với một ứng dụng mất quá nhiều thời gian để khởi động) thì bạn sẽ muốn thực .executehiện tác vụ.
mu quá ngắn

3
Nếu bạn cần phải vượt qua đối số, làm điều đó trong phương thức invoke:.invoke(arg1, arg2,...)
Nuno Silva

14

Cách dễ nhất để làm điều đó là chạy% x [ command ] từ irb. Tôi không chắc liệu bạn có muốn đạt được điều gì không.

%x[rake db:migrate]

CHỈNH SỬA: Tôi thực sự khuyên bạn nên sử dụng .invokenhư Daniel nói trong câu trả lời được chấp nhận.


1
vấn đề là, rake dường như không nhận ra nhiệm vụ của tôi. bất kỳ ý tưởng tại sao?
Fajarmf

nó hoạt động hoàn hảo @garno! xin lỗi, tôi biết đã được một năm và đột nhiên tôi gặp phải nhu cầu tương tự.
Fajarmf

2
Bạn cũng có thể bao quanh nó bằng dấu tích nếu muốn.
Sam Soffes

Quá trình này diễn ra chậm vì nó phải tạo ra một quy trình mới và khởi chạy lại ứng dụng Rails của bạn. invoketốt hơn và hiệu quả hơn.
Joshua Pinter

9

Cách dễ dàng là:

Rails.application.load_tasks
Rake::Task['my_task'].invoke

Đây không chỉ là cách dễ dàng mà còn có nghĩa là bạn không tạo ra một quy trình mới và khởi chạy lại ứng dụng Rails của mình. Dễ dàng nhanh chóng!
Joshua Pinter

2

Tôi đang sử dụng rails 5.x.x, và có nhu cầu làm cùng một hình thức rails console.
Tôi đã tạo nhiệm vụ cào ở đây-

app/lib/task_to_execute.rake

Đây là lệnh làm việc cho tôi-

Tải Rails.application.load_tasks

Rake::Task['task_to_execute:task_name'].invoke

Đã làm cho tôi!


1

Chỉ cần lưu ý rằng nếu bạn đang ở trong bảng điều khiển rails thông qua, rails cbạn chỉ có thể gọi / chạy phương thức tác vụ rake bằng cáchirb(main):001:0> TaskClassName.new.my_task

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.