4

我有一个使用 CicleCI 进行测试的项目,我正在尝试集成 Tire 以实现搜索功能。在本地,所有测试都运行良好,没有问题。但是,当 CircleCI 运行测试时,我遇到了Errno::ECONNREFUSED : Connection refused - connect(2)错误。我尝试将tire.rb文件添加到 config/initilizers:

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

以及这些的任何组合。现在我没有想法,不知道该怎么办。我以为我走在正确的道路上,但现在我不太确定。

如果有人可以提供帮助,将不胜感激。

4

2 回答 2

0

由于 elasticsearch 在本地机器上可用,测试用例将运行良好。但是在 CircleCI 上,您需要明确指定需要弹性搜索。因此,您需要在 circle.yml 的服务下添加“elasticsearch”。

在 circle.yml

machine:
  services:
    - elasticsearch

结帐https://circleci.com/docs/configuration#services了解更多信息。

于 2014-03-07T11:51:17.097 回答
0

注意默认使用的elasticsearch版本(设置service:elasticsearch时)是0.92.0(2岁)

但是,您可以安装自定义版本的 elasticsearch。并且不要忘记从“服务”字段中删除弹性搜索。

但是,elasticsearch 可能需要一些时间才能使用,因此您需要编写一个脚本来重试连接。

这是一个使用 nodejs sdk 的示例:此代码位于我的测试套件的 before all 钩子中:

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);
})
于 2015-08-12T10:28:12.750 回答