在控制器中运行rake任务

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

4 Solutions collect form web for “在控制器中运行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议不要从控制器那里做这样的事情。

  • Integer和Fixnum有什么区别?
  • 从哈希/ YAML中删除所有空元素?
  • Ruby / Rails:将int转换为时间或从整数获取时间?
  • Rails:loggingexception的整个堆栈跟踪
  • 如何解决“/ usr / bin / env:ruby_executable_hooks:没有这样的文件或目录”?
  • 在Ruby中列出理解
  • 如何暂时禁用Rack-Mini-Profiler?
  • 在Ruby on Rails中从模型中访问current_user
  • 添加一个自定义种子文件
  • 用belongs_to多态来接受belongs_nested_attributes_for
  • 为什么“罗盘监视”说它不能加载sass /脚本/节点(LoadError)?