2010-06-11 3 views
1

Могу ли я сделать следующее?Вызов задачи рейка от наблюдателя ActiveRecord

def ModelObserver < ActiveRecord 

    def after_save 
    Rake::Task[name].invoke 
    end 

end 

В данный момент эта функция возвращает следующее сообщение об ошибке:

Don't know how to build task 'name' 

Любая идея?

+1

Какую задачу Rake вы пытаетесь вызвать? Это вы сами написали? –

+0

Задачи, которые я написал, и задания, написанные другими, например. rake thinking_sphinx: reindex – auralbee

ответ

3

Используйте системную команду:

def ModelObserver < ActiveRecord 

    def after_save 
    system "rake #{name}" 
    end 

end 
+1

Это, вероятно, медленное, как черное, поскольку оно порождает полный стек rails. Вы не хотите делать это в наблюдателе ... Особенно вы ДЕЙСТВИТЕЛЬНО не хотите делать это в крючке after_save ... – hurikhan77

+0

Просто смотрел Railscast 127 (http://railscasts.com/episodes/127-rake -в-фон). Помещение & в конце вызова заставит процесс работать в фоновом режиме. system "rake # {name} &" – auralbee

0

Я полагаю, вы должны загрузить среду Rake первой, и Rakefile. Я бы не попытался вызвать полномасштабную командную строку для этого. Вероятно, вам нужно использовать «импорт», как можно найти в Rake API

2

Рассмотрите возможность использования delayed job или аналогичного плагина для обработки фона. В наблюдателе (или контроллере) просто уведомляет фоновый демона задания, что он должен позаботиться о каком-то действии, вместо того, чтобы выполнять эту задачу напрямую.

2

В Rails3, если вы все еще хотите вызвать реки задачу так:

Rake::Task[name].invoke 

вы должны поставить

[Application].load_tasks 

перед тем вызвать команду, где приложение является вашим именем приложения. Например, мне пришлось поставить

Ead::Application.load_tasks 
Смежные вопросы