I want to invoke my rake task from console. Is it doable? if yes, how to do so?
I tried this on console:
require 'rake'
Rake::Task['my_task'].invoke
but it give me this error:
RuntimeError: Don't know how to build task
it's like the rake cannot found the task.
any help would be appreciated.
Thank you
Edit: I am using rails 2.3.5
Running your Rake tasks requires two steps:
Loading Rake Loading your Rake tasks
You are missing the second step.
Normally this is done in the Rakefile, but you have to do it manually here:
require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke
The easiest way to do it is to run %x[command] from the irb. I'm not sure if what you want to achieve though.
%x[rake db:migrate]
EDIT: I highly recommend to use .invoke
as Daniel says in the accepted answer.
invoke
is better and more efficient.
The easy way is:
Rails.application.load_tasks
Rake::Task['my_task'].invoke
I am using rails 5.x.x
, and was in the need the do the same form rails console
.
I have create rake task here-
app/lib/task_to_execute.rake
Here is the command worked for me-
Load Rails.application.load_tasks
Rake::Task['task_to_execute:task_name'].invoke
Worked for me!
Just a note that if you are in the rails console via rails c
you can just call/run the rake task method by irb(main):001:0> TaskClassName.new.my_task
Success story sharing
.invoke
and.execute
, if you need to run the task several times (such as a data sanity checker with an app that takes too long to start up) then you'll want to.execute
the task..invoke(arg1, arg2,...)
db:seed
each time the test suite runs to reseed the database. I used the above code and it works, just wondering if it's best practice or if there's some other way?