Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run rake task in controller

I'd like to run a rake task in my controller. Is there any way to do this?

like image 369
user143482 Avatar asked Jul 23 '09 07:07

user143482


People also ask

How do I run a rake task?

Go to Websites & Domains and click Ruby. After gems installation you can try to run a Rake task by clicking Run rake task. In the opened dialog, you can provide some parameters and click OK - this will be equivalent to running the rake utility with the specified parameters in the command line.


2 Answers

I agree with ddfreynee, but in case you know what you need code can look like:

require 'rake'  Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode Sample::Application.load_tasks # providing your application name is 'sample'  class RakeController < ApplicationController    def run     Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.     Rake::Task[params[:task]].invoke   end  end 

You can require 'rake' and .load_tasks in an initializer instead.

like image 185
Grimmo Avatar answered Sep 18 '22 11:09

Grimmo


I don't find it good style to call a rake task in code. I recommend putting the code for the task that you want to execute somewhere outside a rake task, and have the rake task call this code.

This not only has the advantage of being easy to call outside rake (which is what you want), but it also makes it much easier to test the rake task.

like image 38
Denis Defreyne Avatar answered Sep 19 '22 11:09

Denis Defreyne