提问者:小点点

无法让 Solr 4.8 与 Tomcat 7 和 Ubuntu 12.04 配合使用


我正在尝试让 Solr 4.8 在 Ubuntu 12.04 服务器上的 Tomcat 7 下运行,该服务器将使用 sunspot_rails gem 从 Rails 4 应用程序访问。

目前,我只是使用Solr 4.8中的多核示例进行测试,以验证它是否适用于默认配置。

Tomcat运行良好(curl localhost:8080返回“它正在工作”页面),我在Tomcat或Solr日志中看不到任何错误。但是curl localhost:8080/solr不返回任何内容,而curl localhost:8080/solr/update返回请求的资源(/solr/update)不可用。(我在本地主机上使用 curl,因为我无法远程访问 Tomcat 7 管理员或 Solr 管理员)。

我已经将示例中的solr.war文件复制到多核中,并将所有jar文件和log4j.properties复制到tomcat7 / lib中(基本上只是按照这里的说明进行操作,但对于4.8当然 http://gagannaidu.blogspot.no/2014/02/apache-solr-461-tomcat7-setup-on-ubuntu.html):

sudo cp /usr/share/solr/example/webapps/solr.war /usr/share/solr/example/multicore/solr.war

sudo cp -r solr/example/lib/ext/* /usr/share/tomcat7/lib

sudo cp -r solr/example/resources/log4j.properties /usr/share/tomcat7/lib

我还将多核文件夹的所有者设置为 tomcat7:

sudo chown -R tomcat7 /usr/share/solr/example/multicore

这是我的配置文件:

solr.xml in /var/lib/tomcat7/conf/Catalina/localhost:

<Context docBase="/usr/share/solr/example/multicore/solr.war" debug="0" privileged="true" allowLinking="true" crossContext="true">
  <Environment name="solr/home" type="java.lang.String" value="/usr/share/solr/example/multicore" override="true" />
</Context>

solr.xml in /usr/share/solr/example/multicore:

<solr persistent="false">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
    <core name="core0" instanceDir="core0" />
    <core name="core1" instanceDir="core1" />

    <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
      <str name="urlScheme">${urlScheme:}</str>
    </shardHandlerFactory>
  </cores>
</solr>

我尝试将主机端口更改为“${jetty.port:8080}”或只是“8080”,但这似乎没有帮助。

有人知道我能做些什么来让它工作吗?


共2个答案

匿名用户

好的,终于让它在这里工作了。

这是我所做的:

1)我再次下载了Solr 4.8,解压缩并移至/usr/share/solr

2)我将solr.war复制到solr示例中,而不是多核示例中:

sudo cp /usr/share/solr/example/webapps/solr.war /usr/share/solr/example/solr/solr.war

3)然后我复制了jar和日志文件:

sudo cp -r solr/example/lib/ext/* /usr/share/tomcat7/lib
sudo cp -r solr/example/resources/log4j.properties /usr/share/tomcat7/lib

4)我将/usr/share/tomcat7/lib/log4j.properties中的日志路径设置为(然后创建了文件):

solr.log=/usr/share/solr

touch solr.log

(内部 /usr/share/solr/)

5)我将以下内容放在 solr 中.xml 在 /var/lib/tomcat7/conf/Catalina/localhost 中:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/usr/share/solr/example/solr/solr.war" debug="0" crossContext="true">
  <Environment name="solr/home" type="java.lang.String" value="/usr/share/solr/example/solr" override="true" />
</Context>

6)我在/usr/share/solr/example/solr/solr.xml中将hostPort更改为8080:

<int name="hostPort">8080</int>

7)最后我将用户**tomcat7设置为/usr/share/solr文件夹的所有者:

sudo chown -R tomcat7 /usr/share/solr

这可能可以清理一下,从 Solr 发行版中删除不必要的文件和示例,但至少它让我启动并运行。

对于那些想要将其与 sunspot_rails gem 一起使用的人,您需要将 /usr/share/solr/example/solr/collection1/conf 中的 schema.xml 文件替换为 Rails-project 中的文件,并为 sunspot.yml 文件执行类似操作:

production:
  solr:
    hostname: localhost
    port: 8080
    log_level: WARNING
    path: /solr

更新:

添加我的完整 solr.xml 文件以供参考:

<solr>

  <solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">8080</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>

匿名用户

我也使用相同的东西和相同的网站引用,即使我也有同样的问题,因为 solr.xml 不应该在“/var/lib/tomcat7/conf/Catalina/localhost:”

将 solr.xml 复制到 “/usr/share/tomcat7/conf/Catalina/localhost” 并重新启动 Apache tomcate 并重试

希望这对你有用