Sunspot (Rails) не учитывает конфигурацию data_path

Я использую гем sunpot_rails со следующей конфигурацией в sunspot.yml:

test:
  solr:
    hostname: localhost
    port: <%= 8990 + (ENV['TEST_ENV_NUMBER'] || '1').to_i %>
    path: /solr/test
    pid_dir: solr/pids/test<%= ENV['TEST_ENV_NUMBER'] %>
    data_path: solr/test<%= ENV['TEST_ENV_NUMBER'] %>/data

Он успешно читает разные port и pid_dir, когда я изменяю переменную среды TEST_ENV_NUMBER. Однако моя проблема в том, что он всегда указывает на один и тот же каталог данных, а data_path не действует. На самом деле создается пустой каталог, но solr admin показывает тот же путь. См. ниже информацию об использовании /default/data.

Я знаю, что недавняя фиксация удалила эту конфигурацию, но я использую свою собственную ветку .

введите здесь описание изображения


person hammady    schedule 31.08.2016    source источник


Ответы (1)


Чтобы ответить на мой вопрос, я сначала расскажу, почему мне нужно изменить каталог данных из файлов конфигурации sunspot, а не из конфигурации solr. Я хотел иметь несколько экземпляров Solr для параллельного запуска тестов, используя гем parallel_tests.

Я понял, что нужен только 1 экземпляр Solr. Однако параллельные тесты могут быть выполнены с помощью 1 работающего экземпляра, но с несколькими ядрами Solr. Для этого вам нужно обновить solr/solr.xml, добавив больше ядер:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:}">
    <core name="default"     instanceDir="." dataDir="default/data"/>
    <core name="development" instanceDir="." dataDir="development/data"/>
    <core name="test"        instanceDir="." dataDir="test/data"/>
    <core name="test2"       instanceDir="." dataDir="test2/data"/>
    <core name="test3"       instanceDir="." dataDir="test3/data"/>
    <core name="test4"       instanceDir="." dataDir="test4/data"/>
    <core name="test5"       instanceDir="." dataDir="test5/data"/>
    <core name="test6"       instanceDir="." dataDir="test6/data"/>
    <core name="test7"       instanceDir="." dataDir="test7/data"/>
    <core name="test8"       instanceDir="." dataDir="test8/data"/>
  </cores>
</solr>

Затем перезапустите Solr, чтобы создать эти новые ядра:

RAILS_ENV=test bundle exec rake sunspot:solr:restart

Затем измените config/sunspot.yml, добавив переменную среды к пути:

test:
  solr:
    hostname: localhost
    port: 8981
    log_level: DEBUG
    path: /solr/test<%= ENV['TEST_ENV_NUMBER'] %>

Теперь всякий раз, когда вы запускаете параллельные тесты, будет выбран соответствующий путь/ядро:

bundle exec rake parallel:spec
person hammady    schedule 31.08.2016