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'
localhost
Sunspot コードを使用してデバッグした後、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
これが正しいアプローチかどうかはわかりません。何か基本的なことが欠けている場合はお知らせください。