Как исправить java RuntimeException: Не можете найти ресурс 'solrconfig.xml' в classpath? - PullRequest
4 голосов
/ 12 октября 2011

У меня проблемы с настройкой Solr в качестве службы Tomcat в CentOS.Я использую Solr 3.3.0, который должен работать с Tomcat 5.5, установленным из cPanel.Я получаю сообщение об ошибке:

Не удается найти ресурс 'solrconfig.xml' в classpath или '/home/sampleuser/public_html/apache-solr/example/solr/./conf/', cwd = / usr / local / jakarta / apache-tomcat-5.5.33 / bin

Я видел других людей, имеющих подобные проблемы.Я погуглил и попытался применить все подходы.Однако пока у меня ничего не получалось.

Я сделал следующее:

  1. Скопировано solr.war в tomcat/webapps
  2. Перезапущена служба Tomcat
  3. Отредактировано /usr/local/jakarta/tomcat/webapps/solr/WEB-INF/web.xmlкак:

    <env-entry>
     <env-entry-name>solr/home</env-entry-name>
     <env-entry-value>/home/sampleuser/public_html/apache-solr/example/solr</env-entry-value>
     <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
    
  4. Создано solr.xml в /usr/local/jakarta/tomcat/conf/Catalina/localhost как:

    <?xml version="1.0" encoding="utf-8"?> 
    <Context docBase="/usr/local/jakarta/tomcat/webapps/solr.war" debug="0" crossContext="true">
      <Environment name="solr/home" type="java.lang.String"    
           value="/home/sampleuser/public_html/apache-solr/example"override="true"/>
    </Context>
    
  5. Изменен скрипт запуска tomcat в etc/init.d(не уверен, что мне вообще пришлось это делать) с:

export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/home/sampleuser/public_html/apache-solr/example/solr"

Ниже приведен полный журнал ошибок из catalina.err:

Oct 9, 2011 7:35:06 PM org.apache.catalina.core.StandardService stop 
INFO: Stopping service Catalina 
Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextDestroyed() 
Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextDestroyed() 
Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextDestroyed() 
Oct 9, 2011 7:35:06 PM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextDestroyed() 
Oct 9, 2011 7:35:06 PM org.apache.coyote.http11.Http11BaseProtocol destroy 
INFO: Stopping Coyote HTTP/1.1 on http-8080 
Oct 9, 2011 7:35:21 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk/jre/lib/amd64/server:/usr/local/jdk/jre/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 
Oct 9, 2011 7:35:23 PM org.apache.coyote.http11.Http11BaseProtocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8080 
Oct 9, 2011 7:35:23 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 2875 ms 
Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/5.5.33 
Oct 9, 2011 7:35:23 PM org.apache.catalina.core.StandardHost start 
INFO: XML validation disabled 
Oct 9, 2011 7:35:24 PM org.apache.catalina.startup.HostConfig deployDescriptor 
WARNING: A docBase /usr/local/jakarta/tomcat/webapps/solr.war inside the host appBase has been specified, and will be ignored 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader <init>
INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/' 
Oct 9, 2011 7:35:25 PM org.apache.solr.servlet.SolrDispatchFilter init 
INFO: SolrDispatchFilter.init() 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.CoreContainer$Initializer initialize 
INFO: looking for solr.xml: /home/sampleuser/public_html/apache-solr/example/solr/solr.xml 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.CoreContainer <init>
INFO: New CoreContainer: solrHome=/home/sampleuser/public_html/apache-solr/example/solr/ instance=1537767228 
Oct 9, 2011 7:35:25 PM org.apache.solr.core.SolrResourceLoader <init>
INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/' 
Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader <init>
INFO: Solr home set to '/home/sampleuser/public_html/apache-solr/example/solr/./' 
Oct 9, 2011 7:35:26 PM org.apache.solr.common.SolrException log 
SEVERE: java.lang.RuntimeException: Can't find resource 'solrconfig.xml' in classpath or '/home/sampleuser/public_html/apache-solr/example/solr/./conf/', cwd=/usr/local/jakarta/apache-tomcat-5.5.33/bin 
        at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:268) 
        at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:234) 
        at org.apache.solr.core.Config.<init>(Config.java:141) 
        at org.apache.solr.core.SolrConfig.<init>(SolrConfig.java:131) 
        at org.apache.solr.core.CoreContainer.create(CoreContainer.java:435) 
        at org.apache.solr.core.CoreContainer.load(CoreContainer.java:316) 
        at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:133) 
        at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:94) 
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221) 
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302) 
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78) 
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3666) 
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4258) 
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:634) 
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:561) 
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:496) 
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1203) 
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:319) 
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
        at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:219) 

Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrDispatchFilter init 
INFO: user.dir=/usr/local/jakarta/apache-tomcat-5.5.33/bin 
Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrDispatchFilter init 
INFO: SolrDispatchFilter.init() done 
Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrServlet init 
INFO: SolrServlet.init() 
Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrServlet init 
INFO: SolrServlet.init() done 
Oct 9, 2011 7:35:26 PM org.apache.solr.core.SolrResourceLoader locateSolrHome 
INFO: Using JNDI solr.home: /home/sampleuser/public_html/apache-solr/example/solr 
Oct 9, 2011 7:35:26 PM org.apache.solr.servlet.SolrUpdateServlet init 
INFO: SolrUpdateServlet.init() done 

Когда я копировал пропущенный путь через оболочку, я мог очень хорошо ориентироваться.Похоже, что Tomcat не может найти solrconfig.xml.

1 Ответ

3 голосов
/ 23 марта 2012

Прежде всего: вам не нужно # 3 и # 4 и 5. № 3 на самом деле не так рекомендуется, если вы явно не настраиваете solr.war. # 4 и # 5 - два разных способа сделать одно и то же - использовать тот, который вам удобнее (JNDI против системных свойств)

Второе: обратите внимание, что хотя # 3 и # 5 согласованы, в # 4 вы фактически указываете другой домашний каталог Solr (родительский каталог того, что вы действительно хотите)

В-третьих: я думаю, суть вашей проблемы - права доступа к файлам.

Ведение журнала немного сбивает с толку из-за SOLR-3264 , из-за которого «instanceDirs» для каждого ядра ошибочно называют «Solr Home», но, похоже, происходит то, что он не может найдите (или прочитайте) свой «/home/sampleuser/public_html/apache-solr/example/solr/solr.xml», чтобы перейти в унаследованный «одноядерный» режим, где предполагается, что вы хотите использовать свой каталог Solr Home в качестве instanceDir для (одного) Solr Core - поэтому он ищет «/home/sampleuser/public_html/apache-solr/example/solr/solrconf.xml» и если он не может найти (или прочитать) этот файл, который он дает до.

Итак, в зависимости от того, действительно ли ваша основная проблема заключается в том, что у вас действительно есть файл solr.xml (указывающий на альтернативный instanceDirs), который он не находит, или если у вас действительно есть файл solrconfig.xml, в котором он просматривается, проверьте разрешения этих файлов. файлы (и их каталоги) и убедитесь, что они доступны для чтения эффективному пользователю вашего сервера Tomcat.

(FWIW: Solr 3.6 и выше будут иметь лучшее ведение журнала, когда solr.xml не найден и используется устаревший режим , и я открыл SOLR-3266 , чтобы продолжить способы регистрации / ошибок в нечитаемых файлах в будущем)

...