Run rake task in controller

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.


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.