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
| 归档时间: |
|
| 查看次数: |
9185 次 |
| 最近记录: |