[英]uninitialized constant Faraday::Error::ConnectionFailed in elastic-search
[英]Faraday::ConnectionFailed when using elastic search in rails using docker
我正在嘗試在消息 model 中搜索 function 並且 evrey 在沒有 docker 的情況下運行良好但是當使用 docker 編譯整個堆棧時它給了我
"status": 500,
"error": "Internal Server Error",
"exception": "#<Faraday::ConnectionFailed wrapped=#<Errno::EADDRNOTAVAIL: Failed to open TCP connection to localhost:9200 (Cannot assign requested address - connect(2) for [::1]:9200)>>",
我的 dockercompose.yml`
version: "3.7"
services:
app:
build: .
command: bundle exec rails s -p 3000 -e development -b '0.0.0.0'
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
DB_USER: root
DB_NAME: insta-api
DB_PASSWORD: 123456789
DB_HOST: mysql
mysql:
image: mysql:5.7
volumes:
- insta-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456789
MYSQL_DATABASE: insta-api
elasticsearch:
image: elasticsearch:7.17.6
hostname: "elasticsearch"
environment:
- discovery.type=single-node
ports:
- "9200:9200"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
insta-mysql-data:
` elasticsearch.rb
#./config/initializers
config = {
host: "http://localhost:9200/",
transport_options: {
request: { timeout: 5 }
}
}
if File.exists?("config/elasticsearch.yml")
config.merge!(YAML.load_file("config/elasticsearch.yml")[Rails.env].deep_symbolize_keys)
end
Elasticsearch::Model.client = Elasticsearch::Client.new(config)
.yml
#./config
development: &default
host: 'http://localhost:9200/'
transport_options:
request:
timeout: !!integer 300
test:
<<: *default
staging:
<<: *default
production:
host: 'http://10.50.11.50/'
transport_options:
request:
timeout: !!integer 300
我正在嘗試使用 docker 運行 rails mysql 和彈性搜索所有堆棧。 我嘗試了太多版本的彈性搜索並引發了同樣的錯誤。
我解決了這個問題,因為 elasticsearch.yml 和 elasticsearch.rb 中的主機名我需要將主機轉換為 ENV['ELASTIC_HOST'],我在 docker services.app 的環境參數中確定了它,這里是 dockercompose 文件
version: "3.7"
services:
app:
build: .
command: bundle exec rails s -p 3000 -e development -b '0.0.0.0'
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
DB_USER: root
DB_NAME: insta-api
DB_PASSWORD: 123456789
DB_HOST: mysql
ELASTIC_HOST: elasticsearch
mysql:
image: mysql:5.7
volumes:
- insta-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456789
MYSQL_DATABASE: insta-api
elasticsearch:
image: elasticsearch:7.17.6
hostname: "elasticsearch"
environment:
- discovery.type=single-node
ports:
- 9200:9200
volumes:
insta-mysql-data:
和 elasticsearch.rb
config = {
host: ENV["ELASTIC_HOST"]
}
if File.exists?("config/elasticsearch.yml")
config.merge!(YAML.load_file("config/elasticsearch.yml")[Rails.env].deep_symbolize_keys)
end
Elasticsearch::Model.client = Elasticsearch::Client.new(config)
和 elasticsearch.yml
development: &default
host: 'elasticsearch'
test:
<<: *default
production:
<<: *default
這可能很容易,但這是我第一次使用 docker 之類的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.