Redmine插件需要先修补ApplicationController吗?

时间:2012-06-04 18:02:39

标签: redmine redmine-plugins

这是在Redmine 1.3。

我正在修补ApplicationController以在所有控制器中添加行为(实际上,仅包括帮助程序)。问题是在ApplicationController补丁之前修补的任何控制器都没有获得新的行为。

这很好用:

Dispatcher.to_prepare :my_plugin do
  require_dependency 'my_plugin/application_controller_patch'
  require_dependency 'my_plugin/welcome_controller_patch'
end

但是这样,当我调用我添加的帮助程序时,WelcomeController会抛出一个错误。

Dispatcher.to_prepare :my_plugin do
  require_dependency 'my_plugin/welcome_controller_patch'
  require_dependency 'my_plugin/application_controller_patch'
end

这很容易在插件中修复,但我遇到的问题是另一个插件正在修补控制器,它随后丢失了我的修复程序。更糟糕的是,这只发生在生产中 - 在开发中,我认为插件顺序不同,因为它工作正常。我没有看到改变插件顺序的方法。

我很确定我的补丁本身很好,但万一它看起来像这样:

require_dependency 'application_controller'  

module MyPlugin::ApplicationControllerPatch

  def self.included(base) # :nodoc:
    base.extend(ClassMethods)
    base.send(:include, InstanceMethods)
    base.class_eval do
      unloadable
      helper :search
      include SearchHelper
    end
  end

  module ClassMethods    
  end

  module InstanceMethods
  end # of InstanceMethods
end # of module

ApplicationController.send(:include, MyPlugin::ApplicationControllerPatch)

1 个答案:

答案 0 :(得分:1)

当然,一旦我离开并问了这个问题,我就弄清楚了。

在config / additional_environment.rb中,行

config.plugins = [ :my_plugin, :all ]

确保首先加载我的插件。这似乎已经解决了这种行为。