我正试图修补现有的ActiveRecord Observer;特别是来自Redmine 1.0.4代码库的IssueObserver。
在插件的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
但是,当我运行服务器时(使用使用Mongrel的script/server
),补丁似乎什么都不做。当我创建新问题时,***..***
字符串不会被记录。
通过更改IssueObserver
并包含一个句子来记录after_create事件,然后运行服务器并创建一个问题;我可以看到此日志,但不能登录after_create_with_audit
方法。
是否有适当的方法来修补ActiveRecord Observer?
答案 0 :(得分:0)
似乎Rails VM按需加载和卸载。因此,将init.rb上的代码更改为以下内容可以解决问题:
config.to_prepare do
IssueObserver.send :include, IssueObserverPatch
end
这使得这个代码块可以在生产中按照每个VM执行,也可以在开发时按请求执行。