2017-10-12 3 views
0

J'essaie de déplacer une application Rails qui fonctionne dans un environnement docker.Solr sur un conteneur docker séparé avec des rails de protection solaire

En suivant la philosophie UNIX (/ docker), je voudrais avoir chaque service dans son propre conteneur.

J'ai réussi à obtenir des redis et postgres fonctionnant bien, mais j'ai du mal à obtenir des slor et des rails qui se parlent.

Dans le fichier app/models/spree/sunspot/search_decorator.rb lorsque la ligne exécute

@solr_search.execute 

apparaissent l'erreur suivante sur la console:

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

Alors que la recherche d'une solution que j'ai trouvé des gens installer solr dans le même conteneur que leurs rails app. Mais je préférerais l'avoir dans un conteneur séparé.

Voici mes config/sunspot.yml

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

et docker-compose.yml fichiers

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 

Toutes les suggestions?

+1

Veuillez inclure vos fichiers yml dans la question: les liens externes peuvent disparaître à tout moment – lifeisfoo

+0

@lifeisfoo fait, merci de l'avoir signalé. – jfanals

Répondre

1

Lorsque vous déclarez des services dans un fichier Docker-Composer, les conteneurs auront leur nom en tant que nom d'hôte. Ainsi, votre service solr sera disponible, à l'intérieur du réseau backend, sous la forme solr. Ce que je vois de votre erreur est que le code de ruby ​​essaye de se connecter à localhost:8983, alors qu'il devrait se relier à solr:8983.

Probablement, vous devrez également changer votre nom d'hôte à l'intérieur de config/sunspot.yml, mais je ne travaille pas avec solr donc je ne suis pas sûr à ce sujet.

+0

Lorsque le nom d'hôte est 'solr' je reçois une autre erreur: ' RSolr :: Error :: Http - 404 introuvable Erreur: introuvable URI: http: // solr: 8983/solr/development/select?wt = json' Je vais voir si je trouve une solution à ce problème. Il semble que je me dirige dans le bon chemin :) – jfanals

+0

Oui, maintenant vous atteignez l'hôte et votre erreur de question est résolue. Je pense que si vous voulez de l'aide pour le problème 404 (une erreur de configuration de solr) vous devriez créer une autre question. Parce que ce n'est plus une question de docker. – lifeisfoo

1

Votre config/sunspot.yml doit comporter les éléments suivants:

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 

Si vous voyez

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

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

Créer une nouvelle base en utilisant l'interface d'administration à:

http://localhost:8982/solr/#/~cores

ou à l'aide de la commande suivante:

docker-compose exec solr solr create_core -c development 

j'ai écrit un billet de blog sur ce point: https://blog.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker

Espérons qui aide ceux qui viennent ici au plus tard.