井原(@ihara2525)です。
elasticsearch-extensionsのTest::Clusterを使ってESのテストを書いているときに、ローカルの環境のまま動かそうとすると、
Starting 1 Elasticsearch nodes..sh: 1: elasticsearch: not found
とelasticsearchコマンドが見つからないと怒られてしまう場合、TEST_CLUSTER_COMMANDでコマンドの場所を指定してあげましょう。
circle.ymlの関連する部分は以下のようになりました。(YOUR_RAILS_ROOT部分はそれぞれの環境に合わせて変えてください)
dependencies: bundler: without: [production] cache_directories: - elasticsearch-1.3.2 post: - if [[ ! -e elasticsearch-1.3.2 ]]; then wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz && tar -xvf elasticsearch-1.3.2.tar.gz && elasticsearch-1.3.2/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.3.0; fi test: override: - TEST_CLUSTER_COMMAND=/home/ubuntu/#{YOUR_RAILS_ROOT}/elasticsearch-1.3.2/bin/elasticsearch bundle exec rake
起動時にCircle CIにElasticsearchを動かしてもらうこともできますが、自前で1.3.2とプラグインを持ってきてキャッシュする設定だけやっておきます。 あとは以下のようなファイルをつくって必要な箇所でのみ:elasticsearch
を指定して起動してあげるのは、ローカルでテストするときと同様です。
spec/support/elasticsearch.rb
RSpec.configure do |config| config.before(:all, :elasticsearch) do Elasticsearch::Extensions::Test::Cluster.start(nodes: 1) unless Elasticsearch::Extensions::Test::Cluster.running? end config.after(:all, :elasticsearch) do Elasticsearch::Extensions::Test::Cluster.stop if Elasticsearch::Extensions::Test::Cluster.running? end end
circle.ymlの設定を追加するだけで、ローカルのテストでもCircle CIのテストでも同じコードで動くようになって嬉しいっス。