我正在尝试将一个正在工作的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
有什么建议吗?
2条答案
按热度按时间t2a7ltrp1#
您的config/sunspot.yml应该包含以下内容:
如果您看到
使用管理界面在以下位置创建新Core:
请访问:
或使用以下命令:
我写了一篇关于这个的博客文章:https://gaurav.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker
希望这能帮助那些在后期来到这里的人。
k4emjkb12#
当你在一个docker-compose文件中声明服务时,容器的名称将是hostname,所以你的
solr
服务将在backend
网络中以solr
的形式可用。我从你的错误中看到的是ruby代码试图连接到
localhost:8983
,而它应该连接到solr:8983
。也许你还需要在
config/sunspot.yml
中更改你的主机名,但是我不使用solr,所以我不确定这一点。