Come eseguire attività di rake dalla console?


85

Voglio richiamare la mia attività rake dalla console. È fattibile? se si, come si fa?

L'ho provato su console:

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

ma mi dà questo errore:

RuntimeError: Don't know how to build task

è come se il rake non riuscisse a trovare il compito.

Qualsiasi aiuto sarebbe apprezzato.

Grazie

Modifica: sto usando i binari 2.3.5

Risposte:


189

L'esecuzione delle attività Rake richiede due passaggi:

  1. Caricamento del rastrello
  2. Caricamento delle attività di Rake

Ti manca il secondo passaggio.

Normalmente questo viene fatto nel Rakefile, ma devi farlo manualmente qui:

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

2
Per ulteriori opzioni, consultare stackoverflow.com/questions/577944/…
Jahan

8
Potresti voler notare la differenza tra dire .invokee .execute, se devi eseguire l'attività più volte (come un controllo dell'integrità dei dati con un'app che impiega troppo tempo per avviarsi), allora ti consigliamo di eseguire .executel'attività.
mu è troppo breve

4
Se hai bisogno di passare argomenti, fallo nel metodo invoke:.invoke(arg1, arg2,...)
Nuno Silva

14

Il modo più semplice per farlo è eseguire% x [ comando ] da irb. Non sono sicuro se quello che vuoi ottenere però.

%x[rake db:migrate]

EDIT: Consiglio vivamente di utilizzare .invokecome dice Daniel nella risposta accettata.


1
il problema è che rake non sembra riconoscere il mio compito. qualche idea del perché?
Fajarmf

funziona perfettamente @garno! scusa lo so che è passato un anno e all'improvviso mi trovo di fronte alla stessa esigenza.
Fajarmf

2
Puoi anche circondarlo di zecche posteriori, se lo desideri.
Sam Soffes

Questo è lento perché deve avviare un nuovo processo e istanziare nuovamente la tua app Rails. invokeè migliore e più efficiente.
Joshua Pinter

9

Il modo più semplice è:

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

Questo non è solo il modo più semplice, ma significa anche che non stai avviando un nuovo processo e istanziando nuovamente la tua app Rails. Facile e veloce!
Joshua Pinter

2

Sto usando rails 5.x.xe avevo bisogno di fare la stessa forma rails console.
Ho creato un'attività rake qui-

app/lib/task_to_execute.rake

Ecco il comando che ha funzionato per me-

Caricare Rails.application.load_tasks

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

Ha funzionato per me!


1

Solo una nota che se sei nella console di rails tramite rails cpuoi semplicemente chiamare / eseguire il metodo rake task diirb(main):001:0> TaskClassName.new.my_task

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.