2

Sunspot レール (1.1.0) を使用しています。Rails アプリケーションと Solr サーバーを同じマシンで実行すると、すべてが機能します。別のマシンで Solr サーバーを実行すると、次のエラーが発生します。

Errno::ECONNREFUSED: Connection refused - Connection refused
from /opt/tibco/jruby-1.4.0RC1/lib/ruby/1.8/net/http.rb:560:in `initialize'
from /opt/tibco/jruby-1.4.0RC1/lib/ruby/1.8/net/http.rb:560:in `new'
from /opt/tibco/jruby-1.4.0RC1/lib/ruby/1.8/net/http.rb:560:in `open'

localhostSunspot コードを使用してデバッグした後、Solr::Client がで構成されたリモート ホストではなく、に接続していることに気付きましたsunspot.yml。私の sunspot.yml ファイルは次のとおりです。

production:
  solr:
    hostname: kingkong
    port: 8983
    log_level: WARNING

メソッド ( sunspot_rails build_session-1.1.0/lib/rails.rb:24 行目) は、スレーブ セッションの確立を試みます。slave_config メソッドは、sunspot.yml ファイルで提供される構成を無視します。slave_configメソッドは次のとおりです。

def slave_config(sunspot_rails_configuration)
  config = Sunspot::Configuration.build
  config.solr.url = URI::HTTP.build(
    :host => configuration.hostname,
    :port => configuration.port,
    :path => configuration.path
  ).to_s
  config
end

これは意図した動作ですか?また、リモートで実行されている Solr に正常に接続した人はいますか?

ノート:

Sunspot::Rails.slave_config メソッドにモンキー パッチを適用することで、この問題を回避することができました。settings/initializers ディレクトリに sunspot.rb というファイルを追加しました。

module Sunspot::Rails
  def slave_config(sunspot_rails_configuration)
    config = Sunspot::Configuration.build
    config.solr.url = URI::HTTP.build(
      :host => sunspot_rails_configuration.hostname,
      :port => sunspot_rails_configuration.port,
      :path => sunspot_rails_configuration.path
    ).to_s
    config
  end
end
Sunspot.session = Sunspot::Rails.build_session

これが正しいアプローチかどうかはわかりません。何か基本的なことが欠けている場合はお知らせください。

4

0 に答える 0