2016-04-29 13 views
2

Ich versuche RestClient zu verwenden, zu verwenden, um eine API zu sprechen, und ich diesen Fehler und Backtrace bekommen:NoMethodError versucht, das Ruby-RestClient

>> RestClient.post "http://localhost:8081/accounts", {}.to_json, content_type: :json, accept: :json 
NoMethodError: undefined method `[]' for #<Set: {#<MIME::Type: application/json>}> 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:307:in `type_for_extension' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:312:in `type_for_extension' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:278:in `block in stringify_headers' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:272:in `each' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:272:in `inject' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:272:in `stringify_headers' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:92:in `make_headers' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:58:in `initialize' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `new' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/rest-client-1.6.7/lib/restclient.rb:72:in `post' 
    from (irb):5 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/railties-4.2.6/lib/rails/commands/console.rb:110:in `start' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/railties-4.2.6/lib/rails/commands/console.rb:9:in `start' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:68:in `console' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
    from /Users/pupeno/.rvm/gems/[email protected]/gems/railties-4.2.6/lib/rails/commands.rb:17:in `<top (required)>' 
    from /Users/pupeno/Documents/qredo/console/bin/rails:9:in `require' 
    from /Users/pupeno/Documents/qredo/console/bin/rails:9:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

Irgendwelche Ideen, was falsch ist hier los? Soweit ich sehen kann, kommt die Anfrage möglicherweise nicht einmal auf den Server, aber meine Zeile folgt the RestClient documentation.

+0

Ich habe dieses Juwel gerade zu einem meiner Projekte hinzugefügt. Kannst du deinen Code zeigen und bestätigen, dass die API etwas zurückgibt? – margo

+0

Ich denke, Problem mit leerem Hash {} .to_json versuchen, einen Wert wie {'x' => 1} .to_json zu übergeben. Nur eine Vermutung. –

+0

Können Sie auf eine spätere Version des RestClient-Edelsteins aktualisieren? –

Antwort

2

Ich würde überprüfen, welche Version des mime-types Gem mit Ihrer Version von RestClient installiert ist. Es sieht so aus, als wären die Versionen inkompatibel. Schnell in die Quelle RestClient Graben, Ihre stacktrace geschieht hier:

https://github.com/rest-client/rest-client/blob/v1.6.7/lib/restclient/request.rb#L307

wie die installierte in der Version von Mime-Typ sieht, @extension_index auf einen Satz bezieht, die keine [] Instanzmethode. Der Mime-Typ-Edelstein ist ein bisschen schwer zu stochern, aber ich denke, dass das Set in /lib/mime/types/container.rb (here) initialisiert wird.

Also, an diesem Punkt bedeutet es, Sie haben zwei Möglichkeiten. Stecke entweder das Mime-Type-Juwel auf eine ältere Version in deiner Gemfile oder verbessere RestClient. Sieht so aus, als hätte der RestClient Version 1.7.3 den Affen-Patch entfernt, der das verursacht.

+1

Ich habe RestClient aktualisiert und es hat alles funktioniert. Vielen Dank. – Pablo