Faraday: NoMethodError: أسلوب غير محدد "حجم البايت" لـ # <0x007fb881de2c90 i = "4" />

تم إنشاؤها على ٢٥ مايو ٢٠١٢  ·  7تعليقات  ·  مصدر: lostisland/faraday

أثر:

NoMethodError: undefined method `bytesize' for #<Hash:0x007fb881de2c90>
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1932:in `send_request_with_body'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1919:in `exec'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1317:in `block in transport_request'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1293:in `request'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:745:in `start'
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1284:in `request'
    from /Users/chall/.rvm/gems/ruby-1.9.3-p194@my_api/gems/faraday-0.8.0/lib/faraday/adapter/net_http.rb:72:in `perform_request'
    from /Users/chall/.rvm/gems/ruby-1.9.3-p194@my_api/gems/faraday-0.8.0/lib/faraday/adapter/net_http.rb:35:in `call'
    from /Users/chall/.rvm/gems/ruby-1.9.3-p194@my_api/gems/faraday-0.8.0/lib/faraday/connection.rb:226:in `run_request'
    from /Users/chall/.rvm/gems/ruby-1.9.3-p194@my_api/gems/faraday-0.8.0/lib/faraday/connection.rb:99:in `put'
    from /Users/chall/.rvm/gems/ruby-1.9.3-p194@my_api/gems/fulcrum-0.0.1/lib/my_api/form.rb:31:in `update'
    from (irb):5
    from /Users/chall/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'

طلب المعلمات:

params = {"form"=>{"id"=>"4fbce262ab0a5d57f600022f", "name"=>"POI", "description"=>"", "created_at"=>"2012-05-23T13:13:06Z", "updated_at"=>"2012-05-23T13:13:06Z", "elements"=>[{"disabled"=>false, "hidden"=>false, "key"=>"b9195f6c-d9ff-9b61-838a-6f66a00b683f", "type"=>"TextField", "data_name"=>"name", "required"=>false, "label"=>"Name"}, {"disabled"=>false, "hidden"=>false, "allow_other"=>true, "key"=>"9e1d6d5e-157b-2992-d93f-aa65e4c8d2ff", "type"=>"ClassificationField", "classification_set_id"=>"4fbce262ab0a5d57f6000005", "data_name"=>"classification", "required"=>true, "label"=>"Classification"}, {"disabled"=>false, "hidden"=>false, "key"=>"b9829d7b-ed94-ca8a-3f28-9e063f959cb3", "type"=>"TextField", "data_name"=>"address_1", "required"=>false, "label"=>"Address 1"}, {"disabled"=>false, "hidden"=>false, "key"=>"07cc253d-56da-2f29-eaae-693b2bf4be5c", "type"=>"TextField", "data_name"=>"address_2", "required"=>false, "label"=>"Address 2"}, {"disabled"=>false, "hidden"=>false, "key"=>"4922bfbf-291a-047f-2273-6512cc0eb959", "type"=>"TextField", "data_name"=>"city", "required"=>false, "label"=>"City"}, {"disabled"=>false, "hidden"=>false, "key"=>"6d14d444-f5bc-6231-ac66-bb1e7d613f6a", "type"=>"TextField", "data_name"=>"state_province", "required"=>false, "label"=>"State / Province"}, {"disabled"=>false, "hidden"=>false, "multiple"=>false, "allow_other"=>false, "key"=>"c2bd0c84-967d-fe53-081e-530ef8e4e7bb", "type"=>"ChoiceField", "choice_list_id"=>"4fbce262ab0a5d57f600016c", "default_value"=>"United States", "data_name"=>"country", "required"=>false, "label"=>"Country"}, {"disabled"=>false, "hidden"=>false, "key"=>"a5c58cd8-fa3e-dc03-be15-60c6b3e5954d", "type"=>"TextField", "data_name"=>"phone", "required"=>false, "label"=>"Phone"}, {"disabled"=>false, "hidden"=>false, "key"=>"8d80bb77-0ff1-98ae-ffc5-e55f4c67f539", "type"=>"TextField", "data_name"=>"fax", "required"=>false, "label"=>"Fax"}, {"disabled"=>false, "hidden"=>false, "key"=>"fd10014d-c685-a953-a39b-9e466f8af884", "type"=>"TextField", "data_name"=>"email", "required"=>false, "label"=>"Email"}, {"disabled"=>false, "hidden"=>false, "key"=>"e1ca2a47-89ca-91cd-fbcd-9a7c36486cf9", "type"=>"TextField", "description"=>"If building is a notable, named building.", "data_name"=>"building_name", "required"=>false, "label"=>"Building Name"}, {"disabled"=>false, "hidden"=>false, "key"=>"1992b6b7-bf2f-6878-eacb-6b84a80992dd", "type"=>"PhotoField", "data_name"=>"photos", "required"=>false, "label"=>"Photos"}]}}

كود الاتصال:

class MyApi

  URI = nil #base api uri
  attr :connection

  def initialize(opts = {})
    <strong i="6">@uri</strong> = opts[:uri] || URI
    <strong i="7">@key</strong> = opts[:key] || get_key(opts[:username], opts[:password])
    raise ConnectionError, 'no api key' unless <strong i="8">@key</strong>

    <strong i="9">@connection</strong> = Faraday.new(@uri) do |b|
      b.adapter Faraday.default_adapter
      b.request :json
      b.response :logger
      b.response :raise_error
      b.response :json, :content_type => "application/json"
    end
    @connection.headers['X-ApiToken'] = <strong i="10">@key</strong>
  end
end

لذلك إذا فعلت:

api = MyApi.new(key)
api.connection.put("forms/#{id}.json", params)

أتلقى الخطأ أعلاه و backtrace. في الأصل ، كان لدي طلب الإعداد كـ

b.request :url_encode
b.request :multipart

التعليق الأكثر فائدة

بالنسبة لأي شخص آخر يعاني من هذه المشكلة ، كان علي ببساطة الاتصال بـ .to_json على التجزئة التي كنت أرسلها كجسم.

ال 7 كومينتر

تحتاج إلى وضع المحول في آخر قائمة البرامج الوسيطة.

شكرا ميسلاف!

بالنسبة لأي شخص آخر يعاني من هذه المشكلة ، كان علي ببساطة الاتصال بـ .to_json على التجزئة التي كنت أرسلها كجسم.

لماذا لا يتصل فاراداي بـ_json / to_x_www_form_urlencoded تلقائيًا حسب نوع محتوى الطلب؟

@ a0s يفعل ذلك ، إذا كنت تستخدم أحد البرامج الوسيطة للطلب.
إذا قمت يدويًا بتعيين رأس Content-Type على أي قيمة ، فلن يلمس faraday جسمك.
انظر المثال أدناه لتعيين وترميز الجسم:

connection = Faraday.new(@uri) do |b|
    b.request :json # This will set the "Content-Type" header to application/json and call .to_json on the body
    b.adapter Faraday.default_adapter
end

إذا كنت تفضل استخدام x_www_form_urlencoded بدلاً من ذلك ، فما عليك سوى تبديل b.request :json بـ b.request :url_encoded

iMacTia أعتقد أنه b.request :url_encoded

@ danajackson2 أنت محق جدا! لقد قمت بتحرير تعليقي أعلاه ، شكرًا للإشارة إليه وآسف للخطأ المطبعي!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات