问题
I am in the process of upgrading my app to Rails 4, and now got my rails server, as well as sunspot solr, after a lot of tinkering, to run, I can access Solr admin page. However when I try to access solr from my rails development app to do search or index, I get the following error
RSolr::Error::Http (RSolr::Error::Http - 404 Not Found
Error: Not Found
Request Data: "fq=type%3AMatch&fq=date_in_utc_d%3A%7B2013%5C-11%5C-29T21%5C%3A00%5C%3A00Z+TO+%2A%7D&fq=approval__s%3AAPPROVED&sort=date_d+asc&q=london&fl=%2A+score&qf=caption_text%5E10+city_name_text%5E10+team_name_text%5E10+&defType=edismax&start=0&rows=30"
Backtrace: /Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/rsolr-1.0.9/lib/rsolr/client.rb:268:in `adapt_response'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/rsolr-1.0.9/lib/rsolr/client.rb:175:in `execute'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/rsolr-1.0.9/lib/rsolr/client.rb:161:in `send_and_receive'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/sunspot_rails-2.1.0/lib/sunspot/rails/solr_instrumentation.rb:16:in `block in send_and_receive_with_as_instrumentation'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.1/lib/active_support/notifications.rb:159:in `block in instrument'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.1/lib/active_support/notifications.rb:159:in `instrument'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/sunspot_rails-2.1.0/lib/sunspot/rails/solr_instrumentation.rb:15:in `send_and_receive_with_as_instrumentation'
(eval):2:in `post'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/sunspot-2.1.0/lib/sunspot/search/abstract_search.rb:45:in `execute'
/Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/sunspot-2.1.0/lib/sunspot/session.rb:59:in `search'):
<a href="txmt://open?url=file:///Users/bashar/rails-projects/myapp/app/models/match.rb&line=474&column=1">app/models/match.rb:474:in `upcoming_games'</a>
<a href="txmt://open?url=file:///Users/bashar/rails-projects/myapp/app/controllers/tickets_controller.rb&line=34&column=1">app/controllers/tickets_controller.rb:34:in `search'</a>
Rendered /Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.4ms)
Rendered /Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Users/bashar/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (17.3ms)
This is the sunspot.yml file.
production:
solr:
hostname: ENV['WEBSOLR_URL']
port: 80
log_level: WARNING
path: /solr/production
# read_timeout: 2
# open_timeout: 0.5
development:
solr:
hostname: 192.168.0.11
port: 8981
log_level: INFO
path: /solr/development
test:
solr:
hostname: localhost
port: 8981
log_level: WARNING
path: /solr/test
I verified solr is data is in the right path. I know there are similar posts, but their solutions didn't work. I tried to comment path:, or use /solr/default, or just /solr, or use the ip instead of localhost to no avail
Any idea? Tips on how I can see where the rails suntspot solr request is trying to reach?
回答1:
Solved it! Followed steps in Answer suggested here with little alteration:
- stopping all running solr processes
- removing the solr folder BUT keep a copy of it accessible in case you need some of the old config, synonyms and such.
- gem uninstall all related gems
- bundle install
- rails generate sunspot_rails:install
- start solr
- reindex solr: Now as I'm using mongoid, rake sunspot:reindex doesn't seem to work, but going from console and doing Sunspot.index!(Model.all) is doing it for me.
回答2:
My fix for this problem is: Comment the path parameter(default configuration) at config/sunspot.yml configuration file.
Default was: #path: /solr/development.
After this,
Stop all processes of solr by,
ps aux | grep 'solr' kill PROCESS_ID
Remove "solr" folder which was inside at your application directory.
rm -rf solr
This will remove your previous configurations.
Then,
rake sunspot:solr:start
After starting solr server then again try for reindex,
rake sunspot:reindex
Issue should be resolved.
I have used the sunspot solr full text search for one of my project, where I have resolved the above mentioned issue.
e.g. reference link - http://moreaboutsports.com/
回答3:
The problem I had was the gem was trying to use its own gem directory for the Jetty tempDirectory, and of course it didn't have write permissions, so the server never started. It would appear to launch in the background, but it wasn't really running. When trying to run it in the foreground rake sunspot:solr:run
, it would show some of the error, but I still had to track it down to the config file in the gem. You have to edit the gem config to fix it. I added an issue to GitHub:
https://github.com/sunspot/sunspot/issues/561
The problem is sunspot_solr-2.1.0/bin/contexts/solr.xml file. You have to set the tempDirectory to something with write permissions, like /tmp, instead of '.', the gem directory.
If you are still having trouble with launching Solr try deleting the tmp directory and re-starting the server. I had a strange situation where it was pointing to the /tmp directory and was working, but when I restarted the server, it kept giving me 404 errors! Somehow all the files were deleted that it depends on! Since the directory still existed, it didn't re-copy the WAR and expand it. If you delete the tmp directory, then it will re-copy and re-expand the WAR.
ls /tmp/solr-webapp/
This is in addition to editing the /usr/local/rvm/gems/ruby-2.0.0-p247.../gems/sunspot_solr-2.1.0/solr/contexts/solr.xml file of course.
来源:https://stackoverflow.com/questions/20304160/rails-4-rsolrerrorhttp-rsolrerrorhttp-404-not-found