sunspot_rails не удалось проиндексировать из-за ошибки 404 Not Found

Я пытаюсь установить Sunspot в небольшое приложение Rails, точно следуя инструкциям по установке gem, но каждый раз Я сталкиваюсь с ошибками RSolr::Error::Http: RSolr::Error::Http - 404 Not Found при попытке проиндексировать данные. Я могу воспроизвести это с новым приложением; вот точные шаги, которым я следую:

Создайте новое приложение Rails 4.2.5:

$ rails new test_sunspot
$ cd test_sunspot/
$ spring stop # spring can cause `generate` commands to hang
$ rails g model Thing title:string
$ rake db:migrate
$ rails c
  > Thing.create!(title: "Cats")
  > Thing.create!(title: "Pizza")
  > exit

Добавьте в модель индекс солнечных пятен:

class Thing < ActiveRecord::Base
  searchable do
    text :title
  end
end

Добавьте солнечное пятно в Gemfile:

...
gem 'sunspot_rails', '2.2.2'
gem 'sunspot_solr',  '2.2.2'  
...

Установите, запустите и переиндексируйте Sunspot:

$ bundle install
$ rails g sunspot_rails:install # default sunspot.yml is not changed
$ ps aux | grep solr # confirm that no Solr services are running
$ bundle exec rake sunspot:solr:start # generates solr/ dir; no errors
$ bundle exec rake sunspot:solr:reindex

Эта команда переиндексации дает следующий результат. Когда я захожу в консоль Rails и пытаюсь создать новый объект Thing, возникает та же ошибка (поскольку Sunspot пытается обновить индекс):

Skipping progress bar: for progress reporting, add gem 'progress_bar' to your Gemfile
rake aborted!
RSolr::Error::Http: RSolr::Error::Http - 404 Not Found
Error:     Not Found

URI: http://localhost:8982/solr/development/update?wt=ruby
Request Headers: {"Content-Type"=>"text/xml"}
Request Data: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><query>type:Thing</query></delete>"

Backtrace: /Users/topher/.rvm/gems/ruby-2.2.0/gems/rsolr-1.0.13/lib/rsolr/client.rb:284:in `adapt_response'
/Users/topher/.rvm/gems/ruby-2.2.0/gems/rsolr-1.0.13/lib/rsolr/client.rb:190:in `execute'
/Users/topher/.rvm/gems/ruby-2.2.0/gems/rsolr-1.0.13/lib/rsolr/client.rb:176:in `send_and_receive'
# ...lots of backtrace omitted...
/Users/topher/.rvm/gems/ruby-2.2.0/gems/sunspot_rails-2.2.2/lib/sunspot/rails/tasks.rb:19:in `block (2 levels) in <top (required)>'
/Users/topher/.rvm/gems/ruby-2.2.0/bin/ruby_executable_hooks:15:in `eval'
/Users/topher/.rvm/gems/ruby-2.2.0/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => sunspot:solr:reindex => sunspot:reindex
(See full trace by running task with --trace)

Вывод ps aux | grep solr (после запуска Solr): обратите внимание, что PID, упомянутый в solr/pids/development/sunspot-solr-development.pid, равен 62449, что соответствует третьей строке:

topher          62617   0.0  0.0  2432772    520 s002  R+    3:00PM   0:00.00 grep solr
topher          62484   0.0  1.3  3274624 105756   ??  S     2:57PM   0:03.65 /usr/bin/java -server -Xss256k -Xms512m -Xmx512m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/Users/topher/.rvm/gems/ruby-2.2.0/gems/sunspot_solr-2.2.2/solr/server/logs/solr_gc.log -DSTOP.PORT=7982 -DSTOP.KEY=solrrocks -Djetty.port=8982 -Dsolr.solr.home=/Users/topher/Sites/john_kole/test_sunspot/solr -Dsolr.install.dir=/Users/topher/.rvm/gems/ruby-2.2.0/gems/sunspot_solr-2.2.2/solr -Duser.timezone=UTC -Djava.net.preferIPv4Stack=true -jar start.jar
topher          62449   0.0  0.0  2444632   1304   ??  Ss    2:57PM   0:00.04 bash ./solr start -f -p 8982 -s /Users/topher/Sites/john_kole/test_sunspot/solr

Другие детали:

  • Я на Mac OSX Yosemite
  • Я удалил и переустановил соответствующие драгоценные камни, попытался перейти на Sunspot 1.3.0 и даже запустил gem pristine --all без каких-либо изменений в результате.
  • РЕДАКТИРОВАТЬ: я просмотрел другие подобные тикеты об ошибках Sunspot/Solr 404 Not Found. Похоже, что решения в этих случаях сводились к «сбросу» конфигурации Solr и не относились к новому проекту (среда разработки): предыдущие экземпляры Solr не запускались до запуска rake sunspot:solr:start; это совершенно новый проект Rails, поэтому каталог solr/ в любом случае был только что сгенерирован; это в разработке, а не в производстве; и добавление solr_home: solr к sunspot.yml или обновление path: /solr/default не влияет на результат 404.

Вопросы:

  • Любая идея, почему это происходит?
  • Может ли эта поломка быть связана с тем, что что-то неправильно установлено в моей среде OSX? На что мне смотреть?
  • Можете ли вы заставить Sunspot правильно работать на свежеустановленной текущей версии Rails, выполнив те же действия?

Заранее спасибо!


person Topher Hunt    schedule 03.12.2015    source источник
comment
пружинная остановка иногда не убивает каждый пружинный процесс. может запустить ps aux | grep -i spring, чтобы узнать, есть ли что-то еще   -  person benjamin    schedule 11.12.2015
comment
Спасибо, я могу подтвердить, что ps aux | grep -i spring не показывает никаких запущенных процессов.   -  person Topher Hunt    schedule 13.12.2015


Ответы (2)


Удалите драгоценный камень sunspot_solr и установите solr на свой компьютер с помощью следующих команд.

brew install solr

если это не работает, сначала запустите brew update, чтобы получить последние ссылки solr

brew автоматически установит все недостающие зависимости.

Чтобы начать решение:

solr start

person Omar Mowafi    schedule 07.12.2015
comment
Это позволило бы мне обойти проблему, предполагая, что я могу подключить Sunspot к глобальной установке Solr, и предполагая, что мне не нужно беспокоиться о конфликтах с другими проектами с поддержкой Solr, но это позволяет обойти главный вопрос: почему t Sunspot-Solr работает, и что я могу сделать по-другому, чтобы заставить его работать? Любые идеи по этому поводу будут очень оценены. Во всяком случае, в настоящее время я изучаю решение Vagrant, которое делает примерно то, что вы здесь рекомендуете. - person Topher Hunt; 07.12.2015
comment
Таким образом, есть много вещей, которые могут вызвать эту проблему. Для запуска Solr требуется java, поэтому, если java не настроена правильно в вашей локальной системе, сервер может не работать. Я точно выполнил шаги, описанные в вашем вопросе, и это сработало, и я смог переиндексировать без каких-либо ошибок. Однако я всегда предпочитаю устанавливать сервер в системе, чтобы имитировать работу сервера в производственной среде. - person Omar Mowafi; 07.12.2015
comment
Понятно, это определенно звучит так, будто в моем окружении что-то не так. Сейчас я пойду путем бродяги. - person Topher Hunt; 07.12.2015
comment
Сервер работает нормально. Он выдает 404, так как ему не хватает некоторых разрешений. Мне удалось воспроизвести все сообщения об ошибках на 100% и предоставить один из способов решения проблемы. Другим может быть исправление разрешений на местоположение сервера (гем) в файловой системе через группы. - person benjamin; 12.12.2015

TL;DR: вы все сделали правильно, но пользователь, устанавливающий драгоценные камни, отличается от пользователя, запускающего solr (он же проблема с разрешениями)

Я попытался воспроизвести ваш случай и преуспел, что было очень неправильно. Проблема в том, что при установке драгоценного камня sunspot_solr поставляется встроенный веб-сервер Java Jetty. Мне удалось проследить причину проблемы в том, что этот веб-сервер запущен не так, как человек, который его установил.

Это можно проверить, установив драгоценные камни на:

$ touch Gemfile # to mark it as edited
$ bundle install --path vendor/bundle # to install as user who runs the server later

вместо обычного

$ gem install ... bundle install

как другой пользователь (возможно, root).
Теперь вы можете успешно выполнить все шаги, указанные в вашем посте.

person benjamin    schedule 11.12.2015
comment
Так расстраивает... прежде чем опубликовать это на SO, я воспроизвел эти шаги около 10 раз, чтобы убедиться, что я не смогу обойти проблему. Теперь, десять дней спустя, я выполняю те же самые шаги, и ошибки не возникают, как раньше (хотя я замечаю другие проблемы). Так что возможно, что-то в моей среде изменилось за последнюю неделю и решило эту проблему (тем временем мы вместо этого переключились на использование ElasticSearch); во всяком случае, я не могу убедиться, что ваш совет помогает, но это самое близкое, что у меня есть к ответу, так что вот награда. Спасибо! - person Topher Hunt; 13.12.2015
comment
TopherHunt, я сожалею о ваших постоянных проблемах. Вы перешли на ES из-за этих проблем? Если вам все еще нужно, чтобы solr работал, 4 сообщения @RenegadeAndy о нем могут помочь. Похоже, ему удалось настроить solr как автономный + sunspot в продакшене. - person benjamin; 15.12.2015
comment
Спасибо @benjamin, я подозреваю, что уже могу обойти эту проблему, но да, мы перешли на ElasticSearch (потеря доверия к инструменту и все такое). Документация elasticsearch-rails ужасно дезорганизована по сравнению с Sunspot, но пока это просто работает, поэтому мы пока будем придерживаться этого. - person Topher Hunt; 15.12.2015