将Redmine插件迁移到Rails 3

时间:2012-06-12 19:32:50

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

我正在尝试在Bitnami Stack上使用Redmine 2.0.1运行Time Tracker plugin。 我发现它与Redmine 2不相容*但它无法阻止我。 因此,我将此插件放在../redmine/htdocs/plugins/redmine_time_tracker中,使用rake db:migrate_plugins RAILS_ENV=production迁移它,将路由更改为redmine_time_tracker/config/routes.rb中的Rails 3样式,并将redmine_time_tracker/app/views中的所有文件从* .rhtml重命名为* .html.erb。在Redmine再次重启之后,我靠在墙上。 Redmine的production.log中有一条错误消息:

Started GET "/redmine" for 127.0.0.1 at Tue Jun 12 22:36:05 +0400 2012
Processing by WelcomeController#index as HTML
  Rendered welcome/index.html.erb within layouts/base (9.5ms)
  Rendered plugins/redmine_time_tracker/app/views/time_trackers/_embed_menu.html.erb (203.0ms)
  Rendered plugins/redmine_time_tracker/app/views/time_trackers/_update_menu.html.erb (203.5ms)
Completed 500 Internal Server Error in 252ms

ActionView::Template::Error (undefined method `time_tracker_for' for #<#<Class:0x7f5efb458e48>:0x7f5efb322290>):
    1: <% time_tracker = time_tracker_for(User.current) %>
    2: <% if !time_tracker.nil? %>
    3:     <% if time_tracker.paused %>
    4:         <%# A time tracker is in pause, display the tracked issue, the time spent and the resume/stop actions %>
  lib/redmine/hook.rb:110:in `send'
  lib/redmine/hook.rb:110:in `view_layouts_base_body_bottom'
  lib/redmine/hook.rb:61:in `send'
  lib/redmine/hook.rb:61:in `call_hook'
  lib/redmine/hook.rb:61:in `each'
  lib/redmine/hook.rb:61:in `call_hook'
  lib/redmine/hook.rb:58:in `tap'
  lib/redmine/hook.rb:58:in `call_hook'
  lib/redmine/hook.rb:151:in `call_hook'
  app/views/layouts/base.html.erb:80:in `_app_views_layouts_base_html_erb___1317325009_70022959536540'

time_tracker_for帮助器放在redmine_time_tracker/app/helpers/application_helper.rb中,我认为它应该根据redmine/htdocs/lib/redmine/plugin.rb中的“插件构造函数”自动加载。

我是Ruby和Rails的新手,需要一些指导来继续对抗这种魔力。

2 个答案:

答案 0 :(得分:3)

终于解决了。

我在这里找到:http://www.redmine.org/boards/3/topics/31445 答案(在阅读了我发现的关于redmine中的插件和rails3中的引擎的几乎所有内容之后)

  

扩展默认助手和控制器

     

在2.0.0之前的Redmine版本中,所有插件都在供应商/插件中   文件夹,因为Rails自动加载并添加所有   app / controllers,app / helpers,app / models等文件夹中的文件。

     

这种方法允许扩展现有的控制器和助手   只需在插件的文件夹中添加适当的文件和方法即可。   例如,如果我们必须添加方法get_list_of_projects   SettingsHelper我们可以简单地创建名为settings_helper.rb的文件   插件的app / helpers文件夹。 Redmine 2.x将插件移动到插件中   应用程序根目录中的文件夹,因为描述了该方法   以上根本不起作用。所以我们必须使用修补和覆盖   上述机制使事情有效。

在链接中解释了如何制作上述修补机制。

我为redmine的time_tracker插件实现了该补丁,并且正在运行。 代码在github fork中 https://github.com/martinllanos/redmine_time_tracker

我希望它有所帮助。 有问题请问:)

答案 1 :(得分:1)

我有完全相同的问题,迁移时间跟踪器插件将在Redmine 2上使用。

我一直在网上搜索,虽然我仍然无法修复它,但我发现了一些有用的信息,我认为这是解决这个问题的方法。

第一部分是redmine插件基本上都是Rails引擎 http://www.redmine.org/boards/3/topics/13419

所以我开始谷歌搜索。

我在ruby-forum上发现了两篇帖子,讨论了从应用程序覆盖ApplicationHelper的问题,以及来自插件的ApplicationHelper。 他们提供了几种方法来解决这个问题,但我仍然没有测试它(我试图理解代码)

以下是帖子。

http://www.ruby-forum.com/topic/211017

http://www.ruby-forum.com/topic/1455297

如果你从那里得到一个具体/明确的答案那就太好了:)

我的任何消息都会发布。