3

ファラデーを使用して JSON ボディ (検索用) を含む get リクエストを送信したいのですが、上記のエラーが発生しています。selfProc の内部がめちゃくちゃになっていると思っていましたが、それは関係ありませんでした。[ファラデー github ページ][1] のドキュメントに従っていますが、これで行き詰まりました。

def perform_query
  response = self.database.connection.get do |request|
    request.url self.path
    request.headers['Content-Type'] = 'application/json'
    request.body(self.to_json)
  end
end

def terms_to_json
  terms_array = self.terms.keys.inject([]) do |terms_array, field|
    value = self.terms[field]
    terms_array.tap do |ary|
      if value
        ary << "\"#{field}\": \"#{value}\""
      end 
    end
  end

  "{ #{terms_array.join ','} }"
end

def to_json
  "{ \"queryb\" : #{self.terms_to_json} }"
end

get Proc in のどこかでエラーが発生したスタック トレースを次に示します#perform_query

from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/request.rb:60:in `url'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/connection.rb:219:in `block in run_request'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/connection.rb:237:in `block in build_request'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/request.rb:35:in `block in create'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/request.rb:34:in `tap'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/request.rb:34:in `create'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/connection.rb:233:in `build_request'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/connection.rb:218:in `run_request'
    from /Users/chrismaddox/.rvm/gems/ruby-1.9.3-p125/gems/faraday-0.8.1/lib/faraday/connection.rb:87:in `get'
    from /Users/chrismaddox/Dropbox/LivingSocial/Hungry Academy/Projects/hackchat/search_ruby/elastic.rb:83:in `method_missing'
    from /Users/chrismaddox/Dropbox/LivingSocial/Hungry Academy/Projects/hackchat/search_ruby/elastic.rb:112:in `perform_query'
    from /Users/chrismaddox/Dropbox/LivingSocial/Hungry Academy/Projects/hackchat/search_ruby/elastic.rb:61:in `send_query'

アップデート:

path メソッドは、指定されたインデックスの検索へのパスの文字列を返します。例えば/wombats/animals/_search

Elastic::Database#path 呼び出し Elastic::Index#index_path:

module Elastic
  ELASTIC_URL = "http://localhost:9200"


  class Index
    attr_reader :index_name, :type_name, :last

    def initialize(type)
      @index_name = "#{type}-index"
      @type_name = type
      @last = 0
      add_to_elastic
    end

    def add_to_elastic
      index_url = URI.parse "#{ELASTIC_URL}#{index_path}/"
      Connection.new(index_url).put()
    end

    def index_path
      "/#{self.index_name}"
    end

    def search_path
      "#{type_path}/_search/"
    end

    def type_path
      "#{self.index_path}/#{type_name}/"
    end

  end
end
4

1 に答える 1

1

search_path へ"#{type_path}/_search/" の呼び出し = type_path"#{self.index_path}/#{type_name}/" への呼び出し = index_path への呼び出し ="/#{self.index_name}"

したがって、インデックス名が wombat でタイプ名が animal の場合、search_path は次のように評価されます。/wombat/animal//_search

これはエラーを表示する問題ではなく、ファラデーの方法に一貫性がないために発生したことが判明しました。Faraday::Request#urlFaraday::Request#headersはそれ自体がセッター メソッドFaraday::Request#body=ですが、 はボディのセッター メソッドです。

于 2012-06-08T12:43:15.287 に答える