Donc, je suis arrivé au point que je ne suis pas sûr de la question à poser lors de la recherche de mon problème. Donc, en venant ici, je demande 2 choses.JSON API Curl à HTTParty demande. La requête fonctionne sur ma machine locale avec cURL, mais pas dans la production Heroku avec HTTParty
D'abord, comment puis-je enquêter sur des problèmes comme celui-ci à l'avenir? Deuxièmement, qu'est-ce que je fais mal en ce moment?
Fondamentalement, j'ai créé une application et l'ai poussée à Heroku. Cette application a des points de terminaison API qui fonctionnent exactement comme je le souhaite lorsque j'utilise l'application en local et que j'envoie des commandes curl via mon terminal. Le code que j'utilise pour essayer de me connecter à mon application utilise le gem HTTP et renvoie {"status":500,"error":"Internal Server Error"}
. Donc, c'est la première fois que je tente de me connecter à un point de terminaison de l'API, donc je vole un peu dans le noir ici. Ce que je lis à propos d'une erreur 500 est: "Lorsque tout le reste échoue, une réponse 500 est généralement utilisée lorsque le traitement échoue en raison de circonstances imprévues sur le serveur, ce qui provoque une erreur du serveur." Ce qui ressemble un peu à un fourre-tout pour quelque chose de cassé mais nous ne savons pas quoi, sauf sur le backend. Corrigez-moi si j'ai tort, s'il-vous plait.
Que dois-je faire ensuite?
Ceci est la commande curl je suis en cours d'exécution pour envoyer un e-mail et mot de passe pour recevoir et auth_token:
curl -d "user_login[email][email protected]&user_login[password]=password123" http://localhost:3000/api/v1/sign-in
Comme prévu, je reçois ce retour:
{"auth_token":"628f3ebc47193665e7f1d32ae41ff9a7"}%
C'est le code I Je cours en utilisant HTTParty pour essayer de me connecter avec mon API en production en utilisant Heroku:
consume_api.rb
require "rubygems"
require "httparty"
query_hash = { :user_login => "[email protected]",
:password => "password123" }
response = HTTParty.post("https://fake-heroku-94488.herokuapp.com/api/v1/sign-in", :query => query_hash)
puts response.body, response.code, response.message, response.headers.inspect
Ceci est la réponse au:
{"status":500,"error":"Internal Server Error"}
500
Internal Server Error
{"server"=>["Cowboy"], "date"=>["Fri, 03 Feb 2017 14:49:40 GMT"], "connection"=>["close"], "content-type"=>["application/vnd.api+json; charset=utf-8"], "x-request-id"=>["5d094cee-11a2-4040-abfd-5180f5e46886"], "x-runtime"=>["0.003503"], "vary"=>["Origin"], "content-length"=>["46"], "via"=>["1.1 vegur"]}
Pour réitérer mes questions sont ce que je peux tirer de cette réponse à commencer à enquêter plus loin? Quelles questions devrais-je me poser quand cela se produit?
Deuxièmement, qu'ai-je fait de mal?
Merci d'avance pour votre aide.
Edit:
Une mise à jour rapide est que j'ai couru la commande boucle qui a travaillé localement avec l'URL de mon site de production et cela a fonctionné exactement comme il le fait sur place. Je n'arrive toujours pas à aller plus loin en utilisant HTTParty.
j'ai vérifié mon heroku logs
et trouvé ceci:
2017-02-03T17:22:26.576272+00:00 heroku[router]: at=info method=POST path="/api/v1/sign-in" host=fake-heroku-94488.herokuapp.com request_id=9ab76ce0-95f3-4479-8672-874a624c070e fwd="108.11.195.58" dyno=web.1 connect=1ms service=8ms status=500 bytes=265
Started POST "/api/v1/sign-in" for 108.11.195.58 at 2017-02-03 17:22:26 +0000
Processing by Api::V1::SessionsController#create as JSON
Parameters: {"email"=>"[email protected]", "password"=>"[FILTERED]"}
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)
NoMethodError (undefined method `[]' for nil:NilClass):
app/controllers/api/v1/sessions_controller.rb:7:in `create'
qui pointe vers la ligne 7 de mon SessionsController:
...
6 def create
7 resource = User.find_for_database_authentication(:email => params[:user_login][:email])
8 return invalid_login_attempt unless resource
...
ligne 7 a deux tableaux dans, mais je ne suis pas sûr comment ils sont vides dans la demande Httpary et juste trouver dans la demande curl.
'params [: user_login] [: email]' '-> params [: email] 'parce que' {"email" => "[email protected]", "mot de passe" => "[FILTERED]"} 'n'a pas': user_login' – phoet
Merci de votre commentaire. Il m'a fallu du temps pour comprendre comment fournir de manière appropriée: user_login. – Lenocam