ruby-on-rails solr sunspot

ruby on rails - conexión rechazada de solr en Rspec



ruby-on-rails sunspot (4)

Esta es una adivinanza, pero apuesto a que tiene un servidor Solr configurado en su archivo config / environments / development.rb para buscar localmente en un puerto determinado, pero no existe tal configuración en su config / environments / test.rb

Esto está causando que se conecte a la dirección / puerto predeterminado, donde de hecho no tiene un servidor Solr ejecutándose cuando ejecuta sus pruebas.

No sé lo suficiente sobre el cliente de Solr en Ruby para estar seguro de esto, pero dado que nadie más ha intervenido aún, espero que esto lo guíe en la dirección correcta.

Yo uso los rieles de manchas solares para buscar. Este es un Rspec se ve así:

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

Pero no funciona. Tengo un fracaso:

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

Pero si rake sunspot:solr:start RAILS_ENV=test a mano en la línea de comandos, y luego ejecuta la especificación, pasa.

¿Qué pasa? No es rake sunspot:solr:start RAILS_ENV=test equivalente al system("rake", "sunspot:solr:start") en modo de prueba?

(Intenté `system (" rake "," sunspot: solr: start RAILS_EVN = test "). Mismo).



Lo hice funcionar simplemente agregando

`rake sunspot:solr:start RAILS_ENV=test`

a spec_helper.rb

Editar: terminé yendo con https://github.com/collectiveidea/sunspot_test como mencionó Simmo. Se estaba volviendo a ejecutar la tarea de rake en cada ejecución de prueba por algún motivo (aunque lo tenía en el bloque prefork de spork). No estoy seguro por qué, pero la gema sunspot_test parece ser el camino a seguir por el momento.


Su before(:all) probablemente no le está dando a Solr suficiente tiempo para comenzar.

Dicho esto, es probable que desee reflexionar sobre lo que está pidiendo que verifiquen sus especificaciones aquí. Puede recorrer un largo camino burlándose de las llamadas a Solr con una biblioteca como Fakeweb.

Pivotal Labs también tiene una biblioteca llamada sunspot_matchers que puede capturar aserciones más detalladas sobre las búsquedas que está invocando.

Si va a buscar especificaciones de integración real contra Solr, le aconsejo que solo mantenga funcionando una prueba de Solr mientras trabaja. Una herramienta como Foreman puede ayudarlo a administrar sus procesos de Solr. Podría usar un Procfile como el siguiente:

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

(El desarrollo es, por supuesto, el entorno predeterminado si no se proporciona RAILS_ENV para el foreman start )

Finalmente, si desea iniciar Solr dentro de sus especificaciones, ya está en el camino correcto. Solo sleep allí con tiempo suficiente para permitir que Solr se inicie completamente antes de que sus especificaciones comiencen a funcionar. No se sorprenda si eso introduce un poco de falla impredecible en su conjunto de especificaciones cuando el sistema está bajo carga.

[Editar: Rápido y sucio before :all que usa Sunspot.remove_all para sondear la disponibilidad.]

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