4

테스트 용 CicleCI를 사용하는 프로젝트가 있으며 검색 기능을 위해 Tire를 통합하려고합니다. . 로컬에서는 모든 테스트가 문제없이 잘 실행됩니다. 그러나 CircleCI에서 테스트를 실행하면 Errno::ECONNREFUSED : Connection refused - connect(2) 오류가 발생합니다. 내가 설정/initilizers에 tire.rb 파일을 추가하려고했습니다 :Rails, Tyre 및 CircleCI : 타이어 검색 가능 개체를 생성 할 때 rspec 테스트를 실행할 때 Errno :: ECONNREFUSED 오류가 발생합니다.

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

:이 코드는 내있는 TestSuite의 모든 후크 이전에 –

답변

1

elasticsearch는 로컬 컴퓨터에서 사용할 수 있으므로 테스트 사례가 제대로 실행됩니다. 그러나 CircleCI에서 elasticsearch가 필요하다는 것을 명시 적으로 지정해야합니다. 따라서 circle.yml의 서비스 아래에 'elasticsearch'를 추가해야합니다. 자세한 내용은 circle.yml

machine: 
    services: 
    - elasticsearch 

체크 아웃 https://circleci.com/docs/configuration#services에서

. (서비스 설정시 : elasticsearch)을 기본적으로 사용

0

참고 elasticsearch 버전 0.92.0 (2 세)

할 수 있습니다 그러나 install custom version of elasticsearch입니다. 그리고 "서비스"필드에서 elasticsearch를 제거하는 것을 잊지 마십시오.

그러나 elasticsearch에는 사용 가능한 시간이 걸릴 수 있으므로 연결을 시도하기 위해 스크립트를 작성해야합니다. 여기

은 nodejs SDK를 사용하여 예입니다 : 당신이 circle.yml하는 'elasticsearch를'서비스를 추가 할 필요가

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); 
})