Если вы хотите, чтобы этот код rake выполнялся во время цикла запроса, вам следует избегать запуска rake через system
или любое из семейства exec (включая backticks), поскольку это будет запускать новый интерпретатор 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