Могу ли я установить исправление для существующего ActiveRecord Observer?

Я пытаюсь исправить существующий ActiveRecord Observer; в частности, IssueObserver из кодовой базы Redmine 1.0.4.

В плагине init.rb я включил файл *patch.rb:

require File.join(File.dirname(__FILE__), 'lib/issue_observer_patch.rb')
IssueObserver.send :include, IssueObserverPatch

Это делается вне блока Redmine::Plugin.register.

Модуль делает что-то вроде:

module IssueObserverPatch
  def self.included(base)
    base.send :alias_method_chain, :after_create, :audit
  end

  def after_create_with_audit(issue)
    after_create_without_audit(issue)
    issue.logger.info('***'*50)
    # Insert a new Audit instance.
  end
end

Однако, когда я запускаю сервер (используя script/server, который использует Mongrel), патч, кажется, ничего не делает. Строка ***..*** не регистрируется, когда я создаю новую задачу.

Изменив IssueObserver и включив предложение для регистрации события after_create, а затем запустив сервер и создав проблему; Я вижу этот лог, но не лог метода after_create_with_audit.

Есть ли правильный способ исправить ActiveRecord Observer?


person manu    schedule 24.12.2010    source источник


Ответы (1)


Кажется, что виртуальные машины Rails загружаются и выгружаются по требованию. Итак, изменение кода в init.rb на следующее решает проблему:

config.to_prepare do
  IssueObserver.send :include, IssueObserverPatch
end

Это позволяет выполнять этот блок кода для каждой виртуальной машины в рабочей среде и для каждого запроса при разработке.

person manu    schedule 03.01.2011