【问题标题】:Solr on a separate docker container with sunspot-railsSolr 在带有 sunspot-rails 的单独 docker 容器上
【发布时间】:2017-10-12 13:48:22
【问题描述】:

我正在尝试将正在运行的 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

有什么建议吗?

【问题讨论】:

  • 请在问题中包含您的 yml 文件:外部链接可能随时消失
  • @lifeisfoo 完成,感谢您指出。

标签: ruby-on-rails docker solr docker-compose sunspot-rails


【解决方案1】:

您的 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

使用管理界面创建一个新核心:

http://localhost:8982/so​​lr/#/~cores

或使用以下命令:

docker-compose exec solr solr create_core -c development

我为此写了一篇博文:https://gaurav.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker

希望对后期来这里的人有所帮助。

【讨论】:

    【解决方案2】:

    当您在 docker-compose 文件中声明服务时,容器的名称将作为主机名。因此,您的solr 服务将在backend 网络中可用,即solr

    我从您的错误中看到的是 ruby​​ 代码正在尝试连接到 localhost:8983,而它应该连接到 solr:8983

    您可能还需要在 config/sunspot.yml 中更改您的主机名,但我不使用 solr,所以我不确定。

    【讨论】:

    • 当主机名是 solr 我得到另一个错误:RSolr::Error::Http - 404 Not Found Error: Not Found URI: http://solr:8983/solr/development/select?wt=json 我会看看我是否能找到解决这个问题的方法。看来我正走在正确的道路上:)
    • 是的,现在您已到达主机并且您的问题错误已解决。我认为,如果您需要 404 问题(solr 配置错误)的帮助,您应该创建另一个问题。因为这不再是码头工人的问题了。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2012-01-01
    • 2013-08-06
    相关资源
    最近更新 更多