ruby-on-rails – 连接在Rspec中从solr拒绝

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 连接在Rspec中从solr拒绝前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用太阳黑子轨进行搜索.这些是Rspec看起来像:
describe "GET search" do
  before(:all) do
    system("rake","sunspot:solr:start")
  end

  after(:all) do
    system("rake","sunspot:solr:stop")
  end

  it "should do some search" do
    Text.search do
      ...
    end
  end
end

但它不行.我失败了

Errno::ECONNREFUSED:
   Connection refused - connect(2)

但是如果我输入rake sunspot:solr:启动RAILS_ENV =手动在命令行中测试,然后运行spec,它通过.

怎么了?不是耙子太阳黑子:solr:在测试模式下启动RAILS_ENV =测试相当于系统(“rake”,“sunspot:solr:start”)?

(我试过`system(“rake”,“sunspot:solr:start RAILS_EVN = test”)同样的)

解决方法

你之前(所有)可能只是没有给Solr足够的时间开始.

也就是说,你可能想要想一想你们在这里要求你的规范进行验证.您可以通过像Fakeweb这样的图书馆嘲笑Solr来打电话.

Pivotal Labs还有一个名为sunspot_matchers的库,可以捕获更多关于您正在调用搜索的细粒度的断言.

如果您要针对Solr进行真正的集成规范,我建议您在工作时保持测试Solr运行.像Foreman这样的工具可以帮助您管理您的Solr流程.我可能会使用如下的Procfile:

solr_dev:  rake sunspot:solr:run RAILS_ENV=development
solr_test: rake sunspot:solr:run RAILS_ENV=test

(开发当然是默认环境,如果没有RAILS_ENV另外提供给工头开始)

最后,如果要在您的规格中启动Solr,您已经在正确的轨道上.只要在那里放松一下睡眠,让Solr在您的规格开始运行前完全启动.如果系统处于负载状态时,如果在您的规格套件中引入了一些不可预知的故障,那就别惊讶.

[编辑:快速和肮脏之前:所有使用Sunspot.remove_all轮询可用性.]

before :all do
  `sunspot-solr start`
  begin
    Sunspot.remove_all!
  rescue Errno::ECONNREFUSED
    sleep 1 && retry
  end
end

猜你在找的Ruby相关文章