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

Redmine插件ldap_sync测试报NoMethodError错误求助

Redmine ldap_sync插件测试时500错误排查与解决

我在Redmine上安装了ldap_sync插件,测试时出现500内部服务器错误,报错信息如下:

Completed 500 Internal Server Error in 28ms (ActiveRecord: 19.6ms)
NoMethodError (undefined method `fetch' for nil:NilClass):

涉及的核心代码片段:

def test
    return render 'ldap_setting_invalid' unless @ldap_setting.valid?

    ldap_test = params[:ldap_test]
    users     = ldap_test.fetch(:test_users, '').split(',')
    groups    = ldap_test.fetch(:test_groups, '').split(',')
    [users, groups].each {|l| l.map(&:strip).reject(&:blank?) }


    @test = LdapTest.new(@ldap_setting)
    @test.bind_user = ldap_test[:bind_user]
    @test.bind_password = ldap_test[:bind_password]

    if @test.valid?
      @test.run_with_users_and_groups(users, groups)
    else
      render 'ldap_test_invalid'
    end
end

环境版本信息:

Ruby version 2.7.6-p219 (2022-04-12) [x86_64-linux]
Rails version 5.2.6.3


错误原因

报错直接指向ldap_test.fetch调用,说明params[:ldap_test]获取到的是nil——即请求中没有携带ldap_test嵌套参数,或者参数传递/解析出现异常。常见触发场景:

  • 测试页面的表单字段未按要求命名为ldap_test[test_users]、ldap_test[test_groups]这类嵌套格式
  • 表单提交时数据未正确传递到后端
  • 插件版本与当前Redmine/Rails版本存在兼容性问题,导致参数解析失败

解决办法

1. 检查表单参数命名

打开插件测试页面的HTML源码,确认用户、组输入框的name属性是否为ldap_test[test_users]、ldap_test[test_groups],绑定用户、密码字段同理。如果命名错误,修改对应视图文件中的字段name属性。

2. 添加nil安全处理

直接修改代码,给ldap_test设置默认空哈希,避免调用fetch时触发错误:

def test
    return render 'ldap_setting_invalid' unless @ldap_setting.valid?

    # 给ldap_test设置默认空哈希,避免nil调用fetch
    ldap_test = params[:ldap_test] || {}
    users     = ldap_test.fetch(:test_users, '').split(',').map(&:strip).reject(&:blank?)
    groups    = ldap_test.fetch(:test_groups, '').split(',').map(&:strip).reject(&:blank?)

    @test = LdapTest.new(@ldap_setting)
    # 绑定参数也添加nil安全处理
    @test.bind_user = ldap_test[:bind_user] || ''
    @test.bind_password = ldap_test[:bind_password] || ''

    if @test.valid?
      @test.run_with_users_and_groups(users, groups)
    else
      render 'ldap_test_invalid'
    end
end

3. 适配版本兼容性

检查插件是否有针对Ruby 2.7.x、Rails 5.2.x的适配分支,切换到对应分支重新安装插件。如果没有官方适配,可尝试用params.fetch(:ldap_test, {})替代params[:ldap_test],确保参数获取时不会返回nil。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:45:06