如何在rails应用程序中运行rake任务

fiv*_*six 10 ruby rake ruby-on-rails thinking-sphinx

我想做的事:

在model.rb中,在after_commit中,我想运行rake task ts:reindex

ts:reindex通常使用rake ts:index运行

Ste*_*eet 30

如果你希望这个rake代码在请求周期中运行,那么你应该避免运行rake via system或任何exec系列(包括反引号),因为这将启动一个新的ruby解释器并在每次调用时重新加载rails环境.

相反,您可以直接调用Rake命令,如下所示: -

require 'rake'

class SomeModel <ActiveRecord::Base

  def self.run_rake(task_name)
    load File.join(RAILS_ROOT, 'lib', 'tasks', 'custom_task.rake')
    Rake::Task[task_name].invoke
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:在Rails 4+中,您将使用Rails.root而不是RAILS_ROOT.

然后使用 SomeModel.run_rake("ts:reindex")

这里的关键部分是require rake并确保您加载包含任务定义的文件.

大多数信息来自http://railsblogger.blogspot.com/2009/03/in-queue_15.html