gpt4 book ai didi

ruby-on-rails - 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

转载 作者:行者123 更新时间:2023-12-04 06:05:58 29 4
gpt4 key购买 nike

我正在尝试在我的 Rails 应用程序中使用 Elasticsearch 设置 CircleCI。我认为已经配置了镜像,但是如何在 CI 中连接到它?

到目前为止,我已经尝试...

https://github.com/elastic/elasticsearch/issues/23866

错误信息

Elasticsearch::Transport::Transport::Errors::Unauthorized: [401]

圈 YAML 配置
version: 2
jobs:
build:
working_directory: ~/gathrly-smartforms
docker:
- image: circleci/ruby:2.4.1-node
environment:
RAILS_ENV: continous_integration
PGHOST: 127.0.0.1
PGUSER: rails_test_user

- image: circleci/postgres:9.6.3-alpine
environment:
POSTGRES_USER: rails_test_user
POSTGRES_PASSWORD: ""
POSTGRES_DB: continous_integration

- image: redis:4.0.2
- image: docker.elastic.co/elasticsearch/elasticsearch:5.4.2

steps:
- checkout

- restore_cache:
keys:
- my-application-{{ checksum "Gemfile.lock" }}
- my-application-

- save_cache:
key: rails-demo-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle

- run:
name: Setup Bundler and Gems
command: |
gem install bundler
gem update bundler
gem install brakeman
gem install rubocop
gem install rubocop-rspec
gem install scss_lint
gem install eslint-rails
gem install execjs
bundle config without development:test
bundle check --path=vendor/bundle || bundle install --without development test --path=vendor/bundle --jobs 4 --retry 3

- run:
name: Setup Postgres
command: |
sudo apt-get install postgresql-client

- run:
name: Setup Rails Database
command: |
RAILS_ENV=continous_integration bundle exec rake db:drop
RAILS_ENV=continous_integration bundle exec rake db:setup

- run:
name: Run Rspec
command: |
RAILS_ENV=continous_integration bundle exec rspec --format RspecJunitFormatter -o /tmp/test-results/rspec.xml

- store_test_results:
path: /tmp/test-results

Elasticsearch 初始化器
require 'faraday_middleware/aws_signers_v4'

if Rails.env.production? || Rails.env.staging?
Elasticsearch::Model.client = Elasticsearch::Client.new(url: ENV["AWS_ELASTICSEARCH_HOST"]) do |f|
f.request :aws_signers_v4,
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_ACCESS_SECRET_KEY']),
service_name: 'es',
region: ENV['AWS_REGION']

f.adapter Faraday.default_adapter
end
else
config = {
host: "http://127.0.0.1:9200",
transport_options: {
request: { timeout: 5 }
}
}
if File.exists?("config/elasticsearch.yml")
config.merge!(YAML.load_file("config/elasticsearch.yml"))
end

Elasticsearch::Model.client = Elasticsearch::Client.new(config)
end

最佳答案

来自 elastic 的官方 docker 图像预装了 x-pack。

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/docker.html

这意味着您的 elasticsearch 实例在启用安全性的情况下运行,但您似乎没有向您的 elasticsearch 客户端提供任何安全凭证,因此当您尝试连接时会收到未经授权的 ( 401 ) 错误。

您应该通过添加关闭 ES 实例中的安全性xpack.security.enabled: false给您的 elasticsearch.yml ,或在您的请求中提供有效凭据。

关于ruby-on-rails - 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597848/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com