¿Cómo ejecutar tareas de rake desde la consola?

84

Quiero invocar mi tarea de rake desde la consola. ¿Es factible? si es así, ¿cómo hacerlo?

Intenté esto en la consola:

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

pero me da este error:

RuntimeError: Don't know how to build task

es como si el rastrillo no pudiera encontrar la tarea.

Cualquier ayuda sería apreciada.

Gracias

Editar: estoy usando rieles 2.3.5

Fajarmf
fuente

Respuestas:

188

Ejecutar sus tareas de Rake requiere dos pasos:

  1. Carga de rastrillo
  2. Cargando tus tareas de Rake

Te falta el segundo paso.

Normalmente esto se hace en el Rakefile, pero tienes que hacerlo manualmente aquí:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke
Daniel Rikowski
fuente
2
Para obtener más opciones, consulte stackoverflow.com/questions/577944/…
Jahan
7
Es posible que desee notar la diferencia entre decir .invokey .execute, si necesita ejecutar la tarea varias veces (como un verificador de cordura de datos con una aplicación que tarda demasiado en iniciarse), entonces querrá .executela tarea.
mu es demasiado corto
3
Si necesita pasar argumentos, hágalo en el método de invocación:.invoke(arg1, arg2,...)
Nuno Silva
14

La forma más sencilla de hacerlo es ejecutar% x [ comando ] desde el irb. Sin embargo, no estoy seguro de lo que quieres lograr.

%x[rake db:migrate]

EDITAR: Recomiendo encarecidamente usar .invokecomo dice Daniel en la respuesta aceptada.

garno
fuente
1
el problema es que Rake no parece reconocer mi tarea. alguna idea de por qué?
Fajarmf
¡Funciona perfectamente @garno! lo siento, sé que ha pasado un año y de repente me encuentro con la misma necesidad.
Fajarmf
2
También puede rodearlo con garrapatas traseras si lo desea.
Sam Soffes
Esto es lento porque tiene que iniciar un nuevo proceso y volver a crear una instancia de su aplicación Rails. invokees mejor y más eficiente.
Joshua Pinter
9

La forma fácil es:

Rails.application.load_tasks
Rake::Task['my_task'].invoke
Mohamed Ziata
fuente
Esta no solo es la manera fácil, sino que también significa que no está iniciando un nuevo proceso y creando una instancia de su aplicación Rails nuevamente. ¡Fácil Y Rápido!
Joshua Pinter
2

Estoy usando rails 5.x.x, y necesitaba hacer el mismo formulario rails console.
He creado una tarea de rake aquí.

app/lib/task_to_execute.rake

Aquí está el comando que funcionó para mí:

Carga Rails.application.load_tasks

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

¡Trabajó para mi!

S. Yadav
fuente
1

Solo tenga en cuenta que si está en la consola de rieles a través rails c, puede llamar / ejecutar el método de tarea de rake medianteirb(main):001:0> TaskClassName.new.my_task

aabiro
fuente