在travis-ci上使用太阳黑子出现Solr 404错误

时间:2015-01-09 09:55:04

标签: ruby-on-rails solr rspec sunspot travis-ci

我正在考虑从我的Ruby on Rails应用程序从自定义Jenkins迁移到Travis。

我的应用程序使用Sunspot运行Solr服务器,并在真正的Solr实例上使用rspec测试查询。 我正在使用sunspot_solr gem witch有一个预打包的Solr发行版,还有sunspot-rails-tester gem只在需要时启动Sunspot。

它适用于我们的本地计算机和Jenkins服务器。

但我现在在Travis遇到麻烦......

根据我在特拉维斯看到的日志,太阳黑子似乎推出:

Sunspot server is starting...
Sunspot server is starting...
Sunspot server is starting...
Sunspot server took 4.10 seconds to start

但是当rspec测试尝试进行查询时,我从Solr得到404错误:

 RSolr::Error::Http:
   RSolr::Error::Http - 404 Not Found
   Error:     Not Found

   Request Data: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><query>*:*</query></delete>"

我有一个标准的config / sunspot.yml配置:

development:
  solr:
    hostname: localhost
    port: 8982
    log_level: INFO
    path: /solr/development

test:
  solr:
    hostname: localhost
    port: 8981
    log_level: WARNING
    path: /solr/test

这是我的.travis.yml配置:

language: ruby
rvm:
  - "2.1.3"
cache: bundler
env:
  - DB=postgresql
script:
  - RAILS_ENV=test bundle exec rake db:migrate --trace
  - bundle exec rake db:test:prepare
  - bundle exec rake
before_script:
  - "psql -c 'create database test;' -U postgres"
  - cp config/database.travis.yml config/database.yml
  - cp config/sunspot.travis.yml config/sunspot.yml

修改

我在这里找到了一份工作单:Rails app: Solr throwing RSolr::Error::Http - 404 Not Found when executing search

我的sunspot.yml现在是:

development:
  solr:
    hostname: localhost
    port: 8982
    log_level: INFO
    path: /solr/development

test:
  solr:
    hostname: localhost
    port: 8981
    log_level: WARNING
    path: /solr/test
    solr_home: solr

我不知道这里究竟出了什么问题,为什么我只能为特拉维斯做这件事......

然而,当我设置“solr_home:solr”时,solr安装在这里:

/home/travis/build/myapp/web/vendor/bundle/ruby/2.1.0/gems/sunspot_solr-2.1.1/solr/solr

所以我必须将我的solr / conf / schema.xml复制到这个文件夹中,这是不太可能的,我最终得到了这个travis.yml

language: ruby
rvm:
  - "2.1.3"
cache: bundler
env:
  - DB=postgresql
script:
  - RAILS_ENV=test bundle exec rake db:migrate --trace
  - bundle exec rake db:test:prepare
  - bundle exec rake
before_script:
  - "psql -c 'create database \"elcurator-test\";' -U postgres"
  - cp config/database.travis.yml config/database.yml
  - cp config/sunspot.travis.yml config/sunspot.yml
  - mkdir -p /home/travis/build/myapp/web/vendor/bundle/ruby/2.1.0/gems/sunspot_solr-2.1.1/solr/solr/conf
  - cp solr/conf/schema.xml /home/travis/build/myapp/web/vendor/bundle/ruby/2.1.0/gems/sunspot_solr-2.1.1/solr/solr/conf

所以主要的问题仍然是,当我使用默认的solr_home(即“#{Rails.root} / solr”时,为什么会出现404错误?

2 个答案:

答案 0 :(得分:0)

SO上的另一篇文章暗示您在sunspot.yml中指定的端口可能不是最终使用的端口。

尝试使用端口8983,或在/solr/conf/scripts.conf

中指定为默认值的任何内容

参考:Connection refused using Sunspot and Solr in Rails

答案 1 :(得分:0)

检查文件夹/solr/test的版本是否正确

它应该具有文件solr/test/core.properties和文件夹solr/test/data

缺少Sunspot 404通常是这些文件丢失。

对于test环境和其他环境都是如此。