2017-10-12 61 views
0

我想將一個工作的Rails應用程序移動到碼頭環境。Solr與單獨的碼頭集裝箱與太陽黑子軌道

遵循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 

有什麼建議?

+1

請在您的問題YML文件:外部鏈接可以隨時消失 – lifeisfoo

+0

@lifeisfoo做,謝謝你指出來。 – jfanals

回答

1

在聲明中泊塢窗,撰寫文件服務,容器都會有自己的主機名。因此,您的solr服務將在backend網絡中可用,如solr

我從錯誤中看到的是,ruby代碼嘗試連接localhost:8983,而它應該連接到solr:8983

也許你也需要改變內部config/sunspot.yml您的主機名,但所以我不知道這我不Solr的工作。

+0

當主機名是'solr'我得到另一個錯誤: 'RSolr ::錯誤:: HTTP - 404未找到錯誤:未找到網址:HTTP:// Solr的:8983/Solr的/開發/選擇?wt = json' 我會看看我是否找到解決此問題的方法。它看起來像我在正確的道路:) – jfanals

+0

是的,現在你到達主機,你的問題錯誤已解決。我認爲如果你需要幫助解決404問題(solr配置錯誤),你應該創建另一個問題。因爲這不再是碼頭問題。 – lifeisfoo

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/solr/#/~cores

或使用以下命令:

docker-compose exec solr solr create_core -c development 

我寫了這一篇博客文章:https://blog.koley.in/2018/searching-in-rails-with-solr-sunspot-and-docker

希望幫助那些誰到這裏來在後期階段。