Jak uruchamiać zadania rake z konsoli?


84

Chcę wywołać moje zadanie rake z konsoli. Czy to wykonalne? jeśli tak, jak to zrobić?

Wypróbowałem to na konsoli:

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

ale daje mi ten błąd:

RuntimeError: Don't know how to build task

to tak, jakby grabie nie mogła znaleźć zadania.

jakakolwiek pomoc byłaby doceniona.

Dziękuję Ci

Edycja: używam szyn 2.3.5

Odpowiedzi:


188

Uruchamianie zadań Rake wymaga dwóch kroków:

  1. Ładowanie Rake
  2. Ładowanie Twoich zadań Rake

Brakuje Ci drugiego kroku.

Zwykle robi się to w Rakefile, ale musisz to zrobić ręcznie tutaj:

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

2
Więcej opcji można znaleźć na stackoverflow.com/questions/577944/ ...
Jahan

7
Możesz zwrócić uwagę na różnicę między mówieniem .invokea .execute, jeśli musisz uruchamiać zadanie kilka razy (na przykład sprawdzanie poprawności danych z aplikacją, której uruchomienie trwa zbyt długo), będziesz chciał wykonać .executezadanie.
mu jest za krótkie

3
Jeśli potrzebujesz przekazać argumenty, zrób to w metodzie invoke:.invoke(arg1, arg2,...)
Nuno Silva

14

Najłatwiej to zrobić, wykonując% x [ polecenie ] z irb. Nie jestem jednak pewien, czy chcesz to osiągnąć.

%x[rake db:migrate]

EDYCJA: Gorąco polecam używać .invoketak, jak Daniel mówi w zaakceptowanej odpowiedzi.


1
problem polega na tym, że rake nie rozpoznaje mojego zadania. jakiś pomysł, dlaczego?
Fajarmf

działa idealnie @garno! przepraszam, wiem, że minął rok i nagle mam taką samą potrzebę.
Fajarmf

2
Jeśli chcesz, możesz również otoczyć go tylnymi kleszczami.
Sam Soffes

Jest to powolne, ponieważ musi uruchomić nowy proces i ponownie utworzyć instancję aplikacji Rails. invokejest lepszy i wydajniejszy.
Joshua Pinter

9

Prosty sposób to:

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

To nie tylko łatwy sposób, ale także oznacza, że ​​nie uruchamiasz nowego procesu i nie tworzysz ponownie swojej aplikacji Rails. Łatwo i szybko!
Joshua Pinter

2

Używam i musiałem rails 5.x.xzrobić tę samą formę rails console.
Utworzyłem tutaj zadanie rake-

app/lib/task_to_execute.rake

Oto polecenie, które pracowało dla mnie-

Załaduj Rails.application.load_tasks

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

Pracował dla mnie!


1

Tylko uwaga, jeśli jesteś w konsoli railsów przez rails c, możesz po prostu wywołać / uruchomić metodę zadania rake przezirb(main):001:0> TaskClassName.new.my_task

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.