从ActiveRecord观察者调用rake任务

时间:2010-06-11 09:53:26

标签: ruby-on-rails ruby rake

我可以执行以下操作吗?

def ModelObserver < ActiveRecord

   def after_save
     Rake::Task[name].invoke
   end

end

目前,这会返回以下错误:

Don't know how to build task 'name'

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

使用系统命令:

def ModelObserver < ActiveRecord

   def after_save
     system "rake #{name}"
   end

end

答案 1 :(得分:2)

考虑使用delayed job或类似的插件来处理后台执行。在观察者(或控制器)中,只需通知后台作业守护程序,它应该处理一些操作,而不是直接运行此任务。

答案 2 :(得分:2)

在Rails3中,如果你仍然想要像这样调用rake任务:

Rake::Task[name].invoke

你必须把

[Application].load_tasks

在invoke命令之前,其中application是您的应用程序名称。例如,我必须把

Ead::Application.load_tasks

答案 3 :(得分:0)

我想你必须首先加载Rake环境和Rakefile。我不会尝试调用fullblown命令行来执行此操作。您可能需要使用Rake API

中的“导入”