我想做的事:
在 model.rb 中,在 after_commit 中,我想运行 rake 任务 ts:reindex
ts:reindex 通常与 rake 一起运行 ts:index
如果您希望此 rake 代码在请求周期内运行,那么您应该避免通过以下方式运行 rakesystem
或任何 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
注意:在 Rails 4+ 中,您将使用Rails.root
代替RAILS_ROOT
.
然后只需使用SomeModel.run_rake("ts:reindex")
这里的关键部分是require rake
并确保加载包含任务定义的文件。
大部分信息来自http://railsblogger.blogspot.com/2009/03/in-queue_15.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)