You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redmine插件服务未加载咨询:版本差异与自动加载路径疑问

分析你的Redmine插件加载问题

先直接回应你的三个问题,再给出具体解决方案:

1. Redmine插件服务是否普遍可用?

Redmine的插件生态是相当成熟且普遍可用的,只要插件代码适配目标Redmine版本,就能正常运行。你遇到的问题并非插件本身不可用,而是跨版本兼容性问题——你的插件在Redmine 4.0.4下适配良好,但在3.4.2这个旧版本中存在加载逻辑不兼容的情况。

2. 是否需要配置自动加载路径?

是的,这很可能是你报错的核心原因!

你看到的NameError (uninitialized constant TimesController::SearchTimes),本质是Redmine(底层基于Rails)的自动加载机制没找到SearchTimes这个类。这里的关键差异在于:

  • Redmine 4.0.4基于Rails 5.2,它的自动加载机制会默认扫描app/services这类目录(如果你的SearchTimes是服务类的话);
  • 而Redmine 3.4.2基于Rails 4.2,它不会自动识别app/services这类自定义目录,必须手动配置加载路径。

解决方法是在你的插件根目录的init.rb文件中添加以下代码,把自定义类所在的目录加入自动加载路径:

# 获取插件根目录路径
plugin_root = File.dirname(__FILE__)

# 添加需要自动加载的目录(根据你的实际目录调整,比如services、models子目录)
RedmineApp::Application.config.autoload_paths += Dir["#{plugin_root}/app/services/**/"]
RedmineApp::Application.config.eager_load_paths += Dir["#{plugin_root}/app/services/**/"]

如果SearchTimes在其他目录(比如app/models下的子目录),对应修改路径即可。

3. 是否存在版本差异问题?

绝对存在,这是根本原因!

Redmine 3.4.x和4.0.x之间有不少关键变化:

  • 底层Rails版本差异:3.4用Rails 4.2,4.0用Rails 5.2,两者的常量自动加载规则、API细节有明显区别;
  • Redmine自身API变化:控制器继承、钩子机制、模型关联的一些写法在两个版本中可能不兼容;
  • 目录结构默认加载规则:如前面提到的,Rails 5.2会自动识别更多目录,而Rails 4.2需要手动配置。

额外调试建议

如果配置加载路径后还是报错,可以尝试:

  1. 在times_controller.rb顶部手动引入常量(作为临时调试手段):
require_dependency 'search_times'
  1. 检查SearchTimes的文件名是否符合Rails命名规范——类名SearchTimes对应的文件名应该是search_times.rb,且放在你配置的加载目录下。

内容的提问来源于stack exchange,提问作者chmich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:18:15