Solr 在单独的 docker 容器上使用 sunspot-rails

jfa*_*als 1 solr ruby-on-rails sunspot-rails docker docker-compose

我正在尝试将工作中的 Rails 应用程序移动到 docker 环境。

遵循 UNIX(/docker) 哲学,我希望每个服务都在自己的容器中。

我设法让 redis 和 postgres 正常工作,但我正在努力让 slor 和 rails 相互交谈。

app/models/spree/sunspot/search_decorator.rb该行执行时在文件中

@solr_search.execute
Run Code Online (Sandbox Code Playgroud)

控制台上出现以下错误:

Errno::EADDRNOTAVAIL (Cannot assign requested address - connect(2) for "localhost" port 8983):
Run Code Online (Sandbox Code Playgroud)

在研究解决方案时,我发现人们只是将 solr 安装在与 Rails 应用程序相同的容器中。但我宁愿把它放在一个单独的容器里。

这是我的 config/sunspot.yml

development:
  solr:
    hostname: localhost
    port: 8983
    log_level: INFO
    path: /solr/development
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Gau*_*ley 5

你的 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
Run Code Online (Sandbox Code Playgroud)

如果你看到

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

URI: http://localhost:8982/solr/development/select?wt=json
Run Code Online (Sandbox Code Playgroud)

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

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

或使用以下命令:

docker-compose exec solr solr create_core -c development
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助那些后来来到这里的人。