4

У меня есть проект, который использует CicleCI для тестирования, и я пытаюсь интегрировать Tire для функции поиска , Локально все тесты проходят нормально, без проблем. Однако, когда CircleCI запускает тест, я получаю ошибку Errno::ECONNREFUSED : Connection refused - connect(2). Я пытался добавить tire.rb файл конфигурации/initilizers:Rails, Tire и CircleCI: получение ошибки Errno :: ECONNREFUSED при запуске тестов rspec при создании объектов Tire-Searchable

if Rails.env.test? 
    ENV['ELASTICSEARCH_URL'] = "http://circlehost:9200" # With and without this. 
    Tire.configure do 
    url "http://circlehost:9200" # also tried localhost:9200, and 127.0.0.1:9200 
    end 
end 

Пробовал добавить circle.yml файл, как показано здесь: https://circleci.com/docs/config-sample

hosts: 
    circlehost: 127.0.0.1 

И любая комбинация из них. Теперь у меня нет идей, и я понятия не имею, что делать. Я думал, что я на правильном пути, но теперь я не уверен.

Если кто-то может помочь, был бы признателен.

+0

вам необходимо добавить услугу «elasticsearch» в circle.yml –

ответ

1

Так как поиск elasticsearch доступен на локальной машине, тестовые примеры будут работать нормально. Но в CircleCI вам нужно явно указать, что нужен elasticsearch. Следовательно, вам нужно добавить «elasticsearch» под услугами в circle.yml.

В circle.yml

machine: 
    services: 
    - elasticsearch 

кассе https://circleci.com/docs/configuration#services для получения дополнительной информации.

0

Примечание elasticsearch версия используется по умолчанию (при установке службы: elasticsearch) является 0.92.0 (2-х лет)

Однако вы можете install custom version of elasticsearch. И не забудьте удалить elasticsearch из поля «service».

Однако elasticsearch может занять некоторое время, чтобы быть доступным, поэтому вам нужно будет написать сценарий для повторного подключения.

Вот пример использования nodejs SDK: этот код в перед всеми правдами моего TestSuite:

before(function(done){ 
    var count = 1; 
    function _setup (c) { 
    return client.ping({pingTimeout: 4000}) 
    .then(function() { 
     done(); 
     }) 
    .catch(function (err) { 
     console.log(err); 
     console.log('retry ', c); 
     return setTimeout(function() { 
     _setup(count++); 
     }, 4000); 
    }); 
    } 
    _setup(count); 
})