sunspot_rails由于" 404 Not Found"而无法索引错误

时间:2015-12-03 20:13:48

标签: ruby-on-rails solr sunspot-rails

我试图在一个小的Rails应用程序中安装Sunspot,完全遵循gem setup instructions,但每当我尝试索引数据时遇到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

将Sunspot添加到Gemfile:

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

安装,启动和重新索引太阳黑子:

$ 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

此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之后):请注意solr/pids/development/sunspot-solr-development.pid中提到的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错误门票阅读。看起来这些情况下的解决方案等于&#34;重置&#34; Solr配置并且与新的(开发环境)项目无关:在运行rake sunspot之前没有先前的Solr实例正在运行:solr:start;这是一个完全新鲜的Rails项目,所以solr /目录只是新生成的;这是在发展,而不是生产;将solr_home: solr添加到sunspot.yml或更新path: /solr/default对404结果没有影响。

问题:

  • 知道为什么会这样吗?
  • 这次破坏可能是由于我的OSX环境中安装错误造成的吗?我该怎么看?
  • 按照这些相同的步骤,您是否可以在新安装的当前Rails上正常运行太阳黑子?

提前致谢!

2 个答案:

答案 0 :(得分:2)

通过以下命令

删除计算机上的sunspot_solr gem和安装solr
brew install solr

如果不起作用首先运行brew update以获取最新的solr链接

brew会自动安装所有缺失的依赖项。

开始solr:

solr start

答案 1 :(得分:2)

TL; DR:您已经做好了一切,但安装宝石的用户与运行solr的用户不同(也就是权限问题)

我试图重现你的情况并成功,这感觉非常错误。问题是安装gem sunspot_solr附带了一个嵌入式Java webserver Jetty。我设法追踪问题的原因,因为这个网络服务器不是作为安装它的人运行的。

这可以通过安装gems:

来验证
$ 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用户)。
现在,您可以成功执行帖子中提到的所有步骤。