在控制器中运行rake任务

我想在我的控制器中运行一个rake任务。 有没有办法做到这一点?

我同意ddfreynee,但万一你知道你需要的代码可以看起来像:

 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 

您可以在初始化程序中使用“rake”和.load_tasks。

在代码中调用一个rake任务,我觉得不好。 我build议把任务的代码放在rake任务之外的地方,然后让rake任务调用这个代码。

这不仅具有易于在耙外(这是你想要的)调用的优点,而且还使testing耙测任务变得更容易。

你可以在你的控制器中做到这一点:

 %x[rake name_task] 

与: name_task是您的任务的名称

不要试图在控制器中调用rake任务,而是调用一个包含你试图执行的任何逻辑的服务对象。

 class SomeController < ApplicationController def whatever SomeServiceObject.call end end 

…然后,假设你正在谈论一个自定义rake任务,让它也调用服务对象:

 namespace :example do desc 'important task' task :important_task do SomeServiceObject.call end end 

如果你不熟悉服务对象,他们只是普通的老ruby课程,做一个特定的工作。 如果你试图调用一些默认的rake任务(即:db:migrate),我会强烈build议不要从控制器那里做这样的事情。