Solr 在一个单独的 docker 容器上使用 sunspot-rails
Solr on a separate docker container with sunspot-rails
我正在尝试将工作中的 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
有什么建议吗?
当您在 docker-compose 文件中声明服务时,容器的名称将作为主机名。因此,您的 solr
服务将在 backend
网络内可用,如 solr
.
我从你的错误中看到的是 ruby 代码正在尝试连接 localhost:8983
,而它应该连接到 solr:8983
。
可能您还需要在 config/sunspot.yml
中更改您的主机名,但我不使用 solr,所以我不确定这一点。
您的 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/solr/#/~cores
或使用以下命令:
docker-compose exec solr solr create_core -c development
我为此写了一篇博客 post:https://gaurav.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker
希望对后期来这里的人有所帮助。
我正在尝试将工作中的 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
有什么建议吗?
当您在 docker-compose 文件中声明服务时,容器的名称将作为主机名。因此,您的 solr
服务将在 backend
网络内可用,如 solr
.
我从你的错误中看到的是 ruby 代码正在尝试连接 localhost:8983
,而它应该连接到 solr:8983
。
可能您还需要在 config/sunspot.yml
中更改您的主机名,但我不使用 solr,所以我不确定这一点。
您的 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/solr/#/~cores
或使用以下命令:
docker-compose exec solr solr create_core -c development
我为此写了一篇博客 post:https://gaurav.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker
希望对后期来这里的人有所帮助。