在生产环境中使用Rails设置Sunspot Solr

28

我尝试了各种链接,但似乎找不到一个关于如何在生产环境中创建可与Rails配合使用的运行中Solr实例的好资源。

我知道需要设置Solr服务器以供生产使用。我尝试过使用Tomcat设置Solr,但是我无法将其连接到Rails应用程序。

是否有任何好的资源可以使用?

谢谢

2个回答

42
Sunspot gem包含了`sunspot-solr`二进制文件。最简单的设置方法是仅运行`sunspot-solr start`命令。根据你的应用部署情况,你也可以在Capistrano部署中包含一个任务,使用Sunspot提供的rake任务启动Solr服务器。即:rake sunspot:solr:start RAILS_ENV=production
更深入的操作可能涉及:将Tomcat作为独立服务进行安装、使用自己的init脚本(或Upstart配置)启动和停止它,最好由monit或god监视;在Tomcat中下载和部署solr.war,并配置solr.xml以引用方便存储索引数据的磁盘上的位置,以便存储 solrconfig.xml schema.xml
Solr wiki还包括了关于使用Tomcat安装Solr其他servlet容器的页面。
无论选择以上哪种自托管选项,都有一个重要的要点需要记住:禁用Sunspot的自动提交,并依赖于Solr在solrconfig.xml中的autoCommit设置。你可以通过在config/sunspot.yml中设置auto_commit_after_request: false来禁用这些提交。

最后,如果您只想外包所有这些工作,还有我自己谦虚托管的Solr服务http://websolr.com/ - 我们只需要点击几下即可让您运行起来。


1
我终于成功在Ubuntu 10.04服务器上使用Tomcat运行Solr。最后一件事是如何将其连接到我的Rails应用程序? - Lester Celestial
@Nick,你能否提供更多关于在这种情况下为什么应该将auto_commit_after_request设置为false的信息?这是我唯一看到提到这个的地方。 - Aaron Jensen
2
提交操作很昂贵,会阻塞其他写入操作。在开发和小型生产网站中,每个请求后都发出提交操作是可以的,但随着写入流量的增长,这将成为所有 Solr 更新的负担。您说得对,目前可能没有很突出地记录这一点。 - Nick Zadrozny
在Websolr中,我们在服务器端处理这个问题,并完全忽略传入的提交,而是使用autoCommit设置。 - Nick Zadrozny
1
auto_commit_after_request: false 适用于 Sunspot 管理的索引。如果您有自定义索引,请从 <AR>.index! 中删除 !,并只使用 <AR>.index。我们的 Solr 服务器在使用 index! 时占用了 100% 的 CPU。将其移除并每 10 秒自动提交,使其降至 3%。 - so_mv
显示剩余3条评论

7

这篇博客可能会解决您的问题:

在CentOS上安装Solr 4.4并使用Jetty,以及设置Solr服务器与Sunspot Gem一起工作。 (http://blogs.pigrider.com/blogs/26)

以下是该博客的部分内容: ......

8) 从Rails应用程序中复制配置文件schema.yml到运行的Solr 4.4实例的主目录。 它将覆盖Solr示例配置文件,并设置Solr 4.4服务器与Sunspot Gem一起工作。 cp /RailsApplicationPath/Solr/conf/schema.yml /opt/solr/solr/collection1/conf/。

运行Solr 4.4实例的主目录为/opt/solr/solr/collection1/。 您可以从Solr管理页面http://localhost:8983/solr/admin找到此信息。

9) 将version字段添加到配置文件schema.yml中,以满足Solr 4.4初始化要求。 实际上,需要向文件中添加两行代码。 它们是:

<field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/>

<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

配置文件schema.yml最终会看起来像这样:
<schema name="sunspot" version="1.0">
  <types>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <!-- *** Other Sunspot fieldType Definitions *** -->
  </types>

  <fields>
    <field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/>
    <!-- *** Other Sunspot field Definitions *** -->
  </fields>

  <!-- *** Other Sunspot Configurations *** -->
</schema>

......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接