为Redmine设置我的自定义插件时出错

时间:2014-04-08 09:46:34

标签: ruby-on-rails ruby redmine-plugins

Hy,大家好! 我的Redmine插件的ruby代码中有错误。然后方法Setting.plugin_myplugin['myplugin_setting']发生错误 被称为。

此处追溯此错误:

NoMethodError (undefined method `plugin_myplugin' for #<Class:0x00000004874098>):
  activerecord (3.2.17) lib/active_record/dynamic_matchers.rb:55:in `method_missing'
  plugins/myplugin/lib/myplugin/patches/account_controller_patch.rb:36:in `login_with_myplugin'
  actionpack (3.2.17) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (3.2.17) lib/abstract_controller/base.rb:167:in `process_action'
  actionpack (3.2.17) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (3.2.17) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  activesupport (3.2.17) lib/active_support/callbacks.rb:447:in `_run__4412462782733274046__process_action__1678150651014813342__callbacks'
  activesupport (3.2.17) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.17) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  activesupport (3.2.17) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.17) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (3.2.17) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (3.2.17) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  activesupport (3.2.17) lib/active_support/notifications.rb:123:in `block in instrument'
  activesupport (3.2.17) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (3.2.17) lib/active_support/notifications.rb:123:in `instrument'
  actionpack (3.2.17) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
  actionpack (3.2.17) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
  activerecord (3.2.17) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (3.2.17) lib/abstract_controller/base.rb:121:in `process'
  actionpack (3.2.17) lib/abstract_controller/rendering.rb:45:in `process'
  actionpack (3.2.17) lib/action_controller/metal.rb:203:in `dispatch'
  actionpack (3.2.17) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
  actionpack (3.2.17) lib/action_controller/metal.rb:246:in `block in action'
  actionpack (3.2.17) lib/action_dispatch/routing/route_set.rb:73:in `call'
  actionpack (3.2.17) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
  actionpack (3.2.17) lib/action_dispatch/routing/route_set.rb:36:in `call'
  journey (1.0.4) lib/journey/router.rb:68:in `block in call'
  journey (1.0.4) lib/journey/router.rb:56:in `each'
  journey (1.0.4) lib/journey/router.rb:56:in `call'

系统规格:

  • Redmine 2.5.1
  • apache2.2.22-1ubuntu1.5
  • Passenger 4.0.4
  • ruby​​ 1.9.3p545

有谁知道可能是什么问题?

2 个答案:

答案 0 :(得分:2)

有必要调试代码。

Here Redmine将插件设置加载到类变量。

Here Redmine为每个设置定义了setter / geter。

确切地说,您的方法plugin_myplugin没有出现在@@available_settings中。所以我认为你应该

  • 检查您的init.rb文件并检查您使用的插件名称。
  • 检查您在那里定义的任何设置(工作example
  • (如果以前没有帮助)调试核心:检查为什么你的插件设置没有出现在@@avaulable_settings中(我认为你应该调试here

答案 1 :(得分:2)

这个问题也发生在我身上。

@gotva's answer suggestions我已经能够更深入了解我理解哪个是我的原因。就我而言,我有2个插件:

  • 一个插件已经得到了它的设置(以标准方式注册,即在settings内调用方法Redmine::Plugin.register),我无法访问其配置页面,看到问题中报告的错误;
  • 在另一个插件中,我在注册插件后(即在调用register之后)设置了一个给定的设置(对双关语很抱歉)。

如果我只保留设置,那么带有设置的插件就可以了。

由于Setting类在首次使用时会加载设置,因此我非常确定问题是我使用的插件Setting是在另一个之前加载:所以当我宣布设置时,Setting不再加载它们,因为它已被调用,省略了我想要加载的设置。