簡體   English   中英

Faraday::ConnectionFailed 使用 docker 在 rails 中使用彈性搜索時失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM