#ruby-on-rails #solr #amazon-ec2 #sunspot
#ruby-on-rails #solr #amazon-ec2 #sunspot
Вопрос:
Я пытаюсь настроить версию моего приложения для разработки (RoR 4.0, Sunspot) на экземпляре EC2, который запускает AMI. У меня есть gem install sunspot_solr
и затем bundle exec rake sunspot:solr:start
Похоже, sunspot запустился нормально. Я также могу получить к нему доступ через веб-интерфейс. Затем возникла проблема, когда я пытаюсь добавить новый объект, возникает внутренняя ошибка сервера 500:
RSolr::Error::Http - 500 Internal Server Error Error: {'responseHeader'=>{'status'=>500,'QTime'=>3},'error'=>{'msg'=>'no segments* file found in NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/ec2-user/rails-projects/local-development/solr/development/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@6b01af7; maxCacheMB=48.0 maxMergeSizeMB=4.0): files: [write.lock]','trace'=>'org.apache.lucene.index.IndexNotFoundException: no segments* file found in NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/ec2-user/rails-projects/local-development/solr/development/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@6b01af7; maxCacheMB=48.0 maxMergeSizeMB=4.0): files: [write.lock] at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:741) at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:630) at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:343) at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:673) at org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:77) at org.apache.solr.update.SolrIndexWriter.create(SolrIndexWriter.java:64) at org.apache.solr.update.DefaultSolrCoreState.createMainIndexWriter(DefaultSolrCoreState.java:192) at org.apache.solr.update.DefaultSolrCoreState.getIndexWriter(DefaultSolrCoreState.java:106) at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:153) at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:69) Request Data: "<?xml version="1.0" encoding="UTF-8"?><add><doc><field name="id">Post 4</field><field name="type">Post</field><field name="type">ActiveRecord::Base</field><field name="class_name">Post</field><field name="subject_text"/><field name="subject_text">Van Gogh in London</field><field name="description_text"/><field name="description_text">Testing Experience for Van Gogh.amp;#13;namp;#13;nVincent Willem van Gogh was a post-Impressionist painter of Dutch origin whose work—notable for its rough beauty, emotional honesty, and bold color—had a far-reaching influence on 20th-century art. Wikipediaamp;#13;nBorn: March 30, 1853, Zundert, Netherlandsamp;#13;nDied: July 29, 1890, Auvers-sur-Oise, Franceamp;#13;nPeriod: Post-Impressionismamp;#13;nSiblings: Theo van Gogh, Wil van Gogh, Vincent Van Gogh, moreamp;#13;nParents: Anna Carbentus van Gogh, Theodorus van Gogh</field><field name="tagline_text"/><field name="tagline_text"/></doc></add>" Backtrace: /usr/local/rvm/gems/ruby-2.1.0/gems/rsolr-1.0.10/lib/rsolr/client.rb:283:in `adapt_response' /usr/local/rvm/gems/ruby-2.1.0/gems/rsolr-1.0.10/lib/rsolr/client.rb:190:in `execute' /usr/local/rvm/gems/ruby-2.1.0/gems/rsolr-1.0.10/lib/rsolr/client.rb:176:in `send_and_receive' /usr/local/rvm/gems/ruby-2.1.0/gems/sunspot_rails-2.1.1/lib/sunspot/rails/solr_instrumentation.rb:16:in `block in send_and_receive_with_as_instrumentation' /usr/local/rvm/gems/ruby-2.1.0/gems/activesupport-4.0.0/lib/active_support/notifications.rb:159:in `block in instrument' /usr/local/rvm/gems/ruby-2.1.0/gems/activesupport-4.0.0/lib/active_support/notifications/instrumenter.rb:20:in `instrument' /usr/local/rvm/gems/ruby-2.1.0/gems/activesupport-4.0.0/lib/active_support/notifications.rb:159:in `instrument' /usr/local/rvm/gems/ruby-2.1.0/gems/sunspot_rails-2.1.1/lib/sunspot/rails/solr_instrumentation.rb:15:in `send_and_receive_with_as_instrumentation' (eval):2:in `post' /usr/local/rvm/gems/ruby-2.1.0/gems/rsolr-1.0.10/lib/rsolr/client.rb:82:in `update' /usr/local/rvm/gems/ruby-2.1.0/gems/rsolr-1.0.10/lib/rsolr/client.rb:102:in `add'
Затем я попытался переиндексировать sunspot для устранения неполадок. Он возвращает аналогичную ошибку:
Error - RSolr::Error::Http - 500 Internal Server Error - retrying...
Error - RSolr::Error::Http - 500 Internal Server Error - ignoring...
Error - RSolr::Error::Http - 500 Internal Server Error - retrying...
Error - RSolr::Error::Http - 500 Internal Server Error - ignoring...
Из веб-интерфейса кажется, что это что-то связанное с обработчиком данных? Когда я нажал на DIH для своего ядра, он показывает:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">500</int><int name="QTime">2</int></lst><lst name="error"><str name="trace">java.lang.NullPointerException
at org.apache.solr.handler.admin.ShowFileRequestHandler.showFromFileSystem(ShowFileRequestHandler.java:212)
at org.apache.solr.handler.admin.ShowFileRequestHandler.handleRequestBody(ShowFileRequestHandler.java:122)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1797)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:637)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:343)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:141)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:744)
</str><int name="code">500</int></lst>
</response>
Я просто следовал быстрому руководству по запуску на сайте Sunspot, и он отлично работал на локальном компьютере. Способ, которым я его настраиваю, точно такой же на EC2, но он просто не работает. В результате я думаю, что это не связано с DIH (поскольку я также не определил конфигурацию DIH на локальном компьютере).
Я искал решение в течение двух дней, но безуспешно…. Любая идея была бы очень признательна!
Спасибо