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

Fajarmf
źródło

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
Daniel Rikowski
źródło
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.

garno
źródło
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
Mohamed Ziata
źródło
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!

S.Yadav
źródło
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

aabiro
źródło