代码之家  ›  专栏  ›  技术社区  ›  auralbee

从ActiveRecord Observer调用rake任务

  •  1
  • auralbee  · 技术社区  · 14 年前

    我可以做以下工作吗?

    def ModelObserver < ActiveRecord
    
       def after_save
         Rake::Task[name].invoke
       end
    
    end
    

    此时,返回以下错误:

    Don't know how to build task 'name'
    

    有什么想法吗?

    4 回复  |  直到 14 年前
        1
  •  3
  •   shingara    14 年前

    使用系统命令:

    def ModelObserver < ActiveRecord
    
       def after_save
         system "rake #{name}"
       end
    
    end
    
        2
  •  2
  •   samuil    14 年前

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

        3
  •  2
  •   Adrian Serafin    14 年前

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

    Rake::Task[name].invoke
    

    你必须把

    [Application].load_tasks
    

    在调用命令之前,其中application是应用程序名。例如,我不得不

    Ead::Application.load_tasks
    
        4
  •  0
  •   hurikhan77    14 年前

    我想您必须先加载rake环境和rakefile。我不会尝试调用完整的命令行来实现这一点。您可能需要使用“导入”,如 Rake API