【问题标题】:Handle Solr error messages from Blacklight处理来自 Blacklight 的 Solr 错误消息
【发布时间】:2026-01-14 15:05:02
【问题描述】:

每当 Solr 由于某种原因未能执行查询时,它都会返回错误消息和错误代码。我想在Blacklight 中处理此类错误。现在,当收到来自 Solr 的错误时,用户会收到 500 内部错误。作为一名开发人员,我可以看到发生的事情是 RSolr::Error::Http in CatalogController#index 并带有以下代码行作为问题的根源:

res = blacklight_solr.send_and_receive(path, :params=>solr_params)

是否可以自定义错误处理,以便我至少可以向用户显示指示性错误消息,而不是无用的 500 内部错误?

【问题讨论】:

    标签: ruby-on-rails ruby solr blacklight


    【解决方案1】:

    打开文件lib\blacklight\catalog.rb。函数rsolr_request_error(exception) 负责处理 Solr 错误。 exception 参数是 RSolr::RequestError,它表示来自 Solr 的错误。为了通过显示来自 Solr 的消息来处理错误,只需在 else 中添加以下内容:

    error_status = eval(exception.response[:body])['error']
    if !error_status.nil? and !error_status['msg'].nil?
        flash_notice = error_status['msg']
    else
        flash_notice = I18n.t('blacklight.search.errors.request_error')
    end
    

    如果您希望显示不同的消息,请将不同的消息分配给flash_notice。如果您希望以不同的方式处理错误,那么这里就是这样做的地方。

    【讨论】: