Rails应用程序没有在生产中拾取schema.xml更改

时间:2017-10-17 20:18:25

标签: ruby-on-rails heroku sidekiq sunspot websolr

我们正在Heroku上运行Rails应用程序,使用带有Sidekiq的Websolr插件来排队索引作业。这已经工作了很长时间,但现在我们已经调整schema.xml来改进子串匹配等。

修改后的schema.xml正在本地和CI上运行,但生产Rails应用程序并未启动它。

以下是新架构文件的相关部分:

<fieldType name="text_substr" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="10"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
<dynamicField name="*_substr" stored="false" type="text_substr" multiValued="true" indexed="true"/>

以下是该字段用于索引模型的方式:

class Profile < ActiveRecord::Base
  searchable do
    text :name_similar_match, as: :name_substr do
      name
    end
  end
end

这是我到目前为止所做的:

  • 使用其网站上的配置标签
  • 将修改后的schema.xml复制到Websolr
  • 部署了使用新Solr字段的Rails代码
  • 重新启动运行Sidekiq的Heroku工作者,将其缩放为0然后再次备份

当我尝试在生产中索引Profile时,索引作业会因此错误而失败:

RSolr::Error::Http - 400 Bad Request Error: 'ERROR: [doc=Profile 1] unknown field \'name_substr\'','code'=>400

当我在开发中遇到这种情况时,重新启动Sidekiq以及Solr修复它;我已经重新启动了我在生产中所能做的一切,但没有让它工作。

一个明显的线索是生产Sidekiq仪表板表示它的正常运行时间为123天,尽管Heroku工作人员正在重新启动。我搜索了文档,但我找不到实际重新启动Sidekiq的任何方法。如果有人知道发生了什么,那么我真的很感激一些帮助:)

1 个答案:

答案 0 :(得分:1)

Websolr支持!那个片段对我来说很好看。请注意,通过Websolr仪表板更新schema.xml将自动将更改部署到Solr并重新加载核心,因此无需重新启动任何内容。推送对Rails应用程序的更改应该足以开始使用新字段。

听起来你到目前为止所做的一切都应该有效。注意用你的索引URL拍一封电子邮件来支持-at- websolr.com?我们来看看,确保没有其他事情发生。