【问题标题】:How to run elasticsearch server in rspec如何在 rspec 中运行 elasticsearch 服务器
【发布时间】:2014-07-14 02:21:46
【问题描述】:

在 Linux Mint 16 上运行,我在这里按照以下指南:http://pivotallabs.com/rspec-elasticsearchruby-elasticsearchmodel/ 使用 Ruby on Rails 应用程序设置 elasticsearch。

当我运行 rspec 时,当它到达 spec_helper.rb 这一行时:

config.before :each, elasticsearch: true do
    Elasticsearch::Extensions::Test::Cluster.start(port: 9200) unless Elasticsearch::Extensions::Test::Cluster.running?
  end 

我收到以下错误:

开始 2 个 Elasticsearch 节点..sh: 1: elasticsearch: not found

我认为这可能是路径问题....

所以我在 ~/.bashrc 中添加了以下内容:

export PATH="/etc/init.d:​​$PATH" 因为 sudo /etc/init.d/elasticsearch start 启动了 elasticsearch 服务。

然后我发出命令 source ~/.bashrc

这摆脱了 sh: 1: elasticsearch: not found 消息,取而代之的是 spec_helper.rb 中触发的错误消息:

............Starting 2 Elasticsearch nodes..
[!!!] Process failed to start (see output above)
F........

下面是我的 spec_helper.rb 文件中的配置块:

config.before :each, elasticsearch: true do
    Article.__elasticsearch__.client = Elasticsearch::Client.new host: 'http://localhost:9200'
    Article.__elasticsearch__.create_index!(force: true)
    Article.__elasticsearch__.refresh_index!
    Elasticsearch::Extensions::Test::Cluster.start(port: 9200) unless Elasticsearch::Extensions::Test::Cluster.running?
  end

  config.after :suite do
    Elasticsearch::Extensions::Test::Cluster.stop(port: 9200) if Elasticsearch::Extensions::Test::Cluster.running?
  end

关于问题可能是什么的任何想法?

编辑:如果我按照以下评论者的建议更改为端口 9250:

config.before :each, elasticsearch: true do
   Article.__elasticsearch__.client = Elasticsearch::Client.new host: 'http://localhost:9250'
    Article.__elasticsearch__.create_index!(force: true)
    Article.__elasticsearch__.refresh_index!
    Elasticsearch::Extensions::Test::Cluster.start(port: 9250) unless Elasticsearch::Extensions::Test::Cluster.running?
  end

  config.after :suite do
    Elasticsearch::Extensions::Test::Cluster.stop(port: 9250) if Elasticsearch::Extensions::Test::Cluster.running?
  end

我收到这个新错误:

An error occurred in an after hook
    Faraday::ConnectionFailed: Connection refused - connect(2) for "localhost" port 9250
    occurred at /home/nona/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:879:in `initialize'

F........

【问题讨论】:

  • 您是否已经在测试之外运行了 Elasticsearch?我看到你在检查,但它是否检查了任何已经运行的 Elasticsearch 实例,或者测试助手正在做什么来跟踪它自己的集群?尝试将端口更改为 9250,看看是否可以正常启动。
  • 感谢 MattC,新错误在上面 - 但我认为这是因为弹性搜索仍在 9200 上运行...如果我在浏览器中导航到 localhost:9200,我会得到 200 状态。跨度>
  • 嘿@Nona,你解决问题了吗?我现在正在发生这种情况,令人惊讶的是,我在网上找不到解决方案
  • 嘿 @AlexandreWiechersVaz,通过 Ruby Weekly 233 找到此链接:binarywebpark.com/…

标签: ruby-on-rails ruby rspec elasticsearch


【解决方案1】:

我记得有一个类似的问题,我在 test_helper 中使用以下行解决了它:

ENV["TEST_CLUSTER_NODES"] = "1" # need to set so we trigger correct ES defaults

我通过查看Elasticsearch::Extensions::Test::Cluster 源并意识到Elasticsearch::Extensions::Test::Cluster.running? 正在返回true (因此不启动集群),除非设置了 TEST_CLUSTER_NODES 值。

【讨论】:

  • 感谢您的帮助,它激发了一些想法;我试过这个,但唯一不同的是我收到一条消息“..Starting 1 Elasticsearch nodes”。如果我进入调试环境,返回 false
猜你喜欢
  • 2015-11-30
  • 1970-01-01
  • 2020-11-15
  • 2016-02-21
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多