2016-04-29 4 views
2

J'essaie d'utiliser RESTClient pour parler à une API et je reçois cette erreur et backtrace:NoMethodError essayant d'utiliser 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>' 

Toutes les idées ce qui ne va pas ici? Autant que je peux voir, la demande ne pourrait même pas être au serveur, mais ma ligne suit the RestClient documentation.

+0

Je viens d'ajouter cette gemme à l'un de mes projets. Pouvez-vous montrer votre code et confirmer que l'API renvoie quelque chose? – margo

+0

Je pense que le problème avec hash vide {} .to_json essaie de lui passer une valeur comme {'x' => 1} .to_json. Juste une supposition. –

+0

Êtes-vous capable de mettre à jour vers une version ultérieure de la gemme RestClient? –

Répondre

2

Je vérifie quelle version de la gemme mime-types est installée avec votre version de RestClient. Il semble que les versions peuvent être incompatibles. creuser rapidement dans la source RESTClient, votre stacktrace se passe ici:

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

ressemble à la dans la version des types MIME installés, @extension_index fait référence à un ensemble qui n'a pas de méthode d'instance []. La gemme mime-types est un peu difficile à explorer, mais je pense que l'ensemble est initialisé en /lib/mime/types/container.rb (here). Donc, à ce stade, cela signifie que vous avez deux options. Epinglez la gemme mime-types sur une version plus ancienne dans votre Gemfile, ou mettez à niveau RestClient. On dirait que RestClient version 1.7.3 a sorti le patch de singe qui provoque cela.

+1

J'ai mis à jour RestClient et tout a fonctionné. Je vous remercie. – Pablo