Solr位于带太阳黑子轨道的独立码头集装箱上

q35jwt9p  于 2022-11-05  发布在  Solr
关注(0)|答案(2)|浏览(198)

我正在尝试将一个正在工作的Rails应用程序移到Docker环境中。
遵循UNIX(/docker)的理念,我希望每个服务都在自己的容器中。
我设法让redis和postgres工作得很好,但我正在努力让slor和rails互相交谈。
在文件app/models/spree/sunspot/search_decorator.rb中当行执行时

@solr_search.execute

控制台上出现以下错误:

Errno::EADDRNOTAVAIL (Cannot assign requested address - connect(2) for "localhost" port 8983):

在寻找解决方案的时候,我发现人们只是把solr和他们的rails应用程序安装在同一个容器里,但是我宁愿把它安装在一个单独的容器里。
这是我的config/sunspot.yml

development:
  solr:
    hostname: localhost
    port: 8983
    log_level: INFO
    path: /solr/development

docker-compose.yml文件

version: '2'
services:
  db:
    (...)

  redis:
    (...)

  solr:
    image: solr:7.0.1

    ports:
      - "8983:8983"

    volumes:
      - solr-data:/opt/solr/server/solr/mycores

    entrypoint:
      - docker-entrypoint.sh
      - solr-precreate
      - mycore

    networks:
      - backend

  app:
    build: .

    env_file: .env

    environment:
      RAILS_ENV: $RAILS_ENV

    depends_on:
      - db
      - redis
      - solr

    ports:
      - "3000:3000"

    tty: true

    networks:
      - backend

volumes:
  solr-data:
  redis-data:
  postgres-data:

networks:
  backend:
    driver: bridge

有什么建议吗?

t2a7ltrp

t2a7ltrp1#

您的config/sunspot.yml应该包含以下内容:

development:
  solr:
    hostname: solr # since our solr instance is linked as solr
    port: 8983
    log_level: WARNING
    solr_home: solr
    path: /solr/mycore 
    # this path comes from the last command of our entrypoint as
    # specified in the last parameter for our solr container

如果您看到

Solr::Error::Http (RSolr::Error::Http - 404 Not Found
Error:     Not Found

URI: http://localhost:8982/solr/development/select?wt=json

使用管理界面在以下位置创建新Core:
请访问:
或使用以下命令:

docker-compose exec solr solr create_core -c development

我写了一篇关于这个的博客文章:https://gaurav.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker
希望这能帮助那些在后期来到这里的人。

k4emjkb1

k4emjkb12#

当你在一个docker-compose文件中声明服务时,容器的名称将是hostname,所以你的solr服务将在backend网络中以solr的形式可用。
我从你的错误中看到的是ruby代码试图连接到localhost:8983,而它应该连接到solr:8983
也许你还需要在config/sunspot.yml中更改你的主机名,但是我不使用solr,所以我不确定这一点。

相关问题