Faraday: NoMethodError: #<0x007fb881de2c90 i="4"/>์— ๋Œ€ํ•œ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ `bytesize'

์— ๋งŒ๋“  2012๋…„ 05์›” 25์ผ  ยท  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)

์œ„์˜ ์˜ค๋ฅ˜์™€ ์—ญ์ถ”์ ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ์š”์ฒญ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

b.request :url_encode
b.request :multipart

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ๋ณธ๋ฌธ์œผ๋กœ ๋ณด๋‚ด๋Š” ํ•ด์‹œ์—์„œ .to_json ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  7 ๋Œ“๊ธ€

๋ฏธ๋“ค์›จ์–ด ๋ชฉ๋ก์—์„œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋งˆ์ง€๋ง‰์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ์š” mislav!

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ๋ณธ๋ฌธ์œผ๋กœ ๋ณด๋‚ด๋Š” ํ•ด์‹œ์—์„œ .to_json ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Faraday๊ฐ€ ์š”์ฒญ์˜ ์ฝ˜ํ…์ธ  ์œ ํ˜•์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ to_json/to_x_www_form_urlencoded๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@a0s ์š”์ฒญ ๋ฏธ๋“ค์›จ์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
Content-Type ํ—ค๋”๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํŒจ๋Ÿฌ๋ฐ์ด๊ฐ€ ๋ชธ์— ๋‹ฟ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ณธ๋ฌธ์„ ์„ค์ •ํ•˜๊ณ  ์ธ์ฝ”๋”ฉํ•˜๋ ค๋ฉด ์•„๋ž˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

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 ๋“ฑ๊ธ‰