Rails - Solr 生产服务器,连接被拒绝

Rails - Solr production server, connection refused

我有一个 rails 应用程序,它使用 sunspot/solr 进行搜索。这个应用程序在开发中运行良好,但现在我正在尝试将它部署到我遇到问题的服务器。

我在 Ubuntu 14.04 一键图像上使用带有 Dokku 0.5.4 的 Digital Ocean droplet。

我第一次尝试启动 Solr 并 运行ning 我按照 official sunspot github 页面上的说明进行操作。尽管按照信中的说明进行操作,但我无法让我的应用程序与 Solr 对话。

由于链接指南中的教程有点旧。我决定旋转一个全新的液滴,然后再试一次,这次是找到了稍微更新的方向 here。逐字按照这些说明操作后,我的 rails 应用程序仍然存在连接问题。

这是我遇到的错误

RSolr::Error::ConnectionRefused: Connection refused - {:data=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">Person 3</field><field name=\"type\">Person</field><field name=\"type\">ActiveRecord::Base</field><field name=\"class_name\">Person</field><field boost=\"2\" name=\"first_name_text\">Joe</field><field name=\"last_name_text\">Schmoe</field><field name=\"email_text\">joe@example.com</field></doc></add>", :headers=>{"Content-Type"=>"text/xml"}, :method=>:post, :params=>{:wt=>:ruby}, :query=>"wt=ruby", :path=>"update", :uri=>#<URI::HTTP http://localhost:8983/solr/solr_sunspot_example/update?wt=ruby>, :open_timeout=>nil, :read_timeout=>nil, :retry_503=>nil, :retry_after_limit=>nil}

我应该指出,当我导航到 mydomain.com:8983 时,我可以看到 solr 服务器正在运行。另外,当我 运行 service solr status 我得到以下信息。

Found 1 Solr nodes:

Solr process 1164 running on port 8983
{
  "solr_home":"/var/solr/data/",
  "version":"5.2.1 1684708 - shalin - 2015-06-10 23:20:13",
  "startTime":"2016-04-15T19:38:29.651Z",
  "uptime":"0 days, 0 hours, 24 minutes, 17 seconds",
  "memory":"93.7 MB (%19.1) of 490.7 MB"}

这是我的 sunspot.yml 文件

production:
  solr:
    hostname: localhost
    port: 8983
    log_level: WARNING
    path: /solr/solr_sunspot_example

这是我第一次尝试使用 sunspot/solr,但我看不出哪里出了问题。我是否以正确的方式设置了 solr?

生产配置中可能缺少用户名和密码?

production:
  solr:
    hostname: point_to_solr_host
    port: 443
    log_level: WARNING
    path: /solr/solr_sunspot_example
    user: <%= ENV["SOLR_USER"] %>
    password: <%= ENV["SOLR_PASSWORD"] %>

很可能,您的 Solr 未设置为侦听本地主机接口而仅侦听 mydomain.com 接口。

要验证此假设,请从您的实例中执行 curl localhost:8983/solr/solr_sunspot_examplecurl mydomain.com:8983/solr/solr_sunspot_example。如果第二个命令成功,而第一个命令没有成功,情况就是如此。

您将有 2 个选项来解决它:要么指向您的配置以查询 mydomain.com 接口,要么更改 Solr 配置以侦听本地主机接口。后者将由 sunspot.yml 中的主机名设置控制(请参阅上面引用的 github wiki 页面)。