Also, ich bin zu dem Punkt gekommen, dass ich nicht sicher bin, welche Frage ich bei der Recherche meines Problems noch stellen muss. Also, indem ich hierher komme, frage ich 2 Dinge.Json API Curl zu HTTParty Anfrage. Die Anfrage funktioniert auf meinem lokalen Rechner mit cURL, aber nicht in Heroku-Produktion mit HTTParty
Erstens, wie bekomme ich in Zukunft solche Probleme zu untersuchen? Zweitens, was mache ich gerade falsch?
Grundsätzlich habe ich eine App erstellt und schob es nach Heroku. Diese App hat API-Endpunkte, die genau so funktionieren, wie ich es erwarte, wenn ich die App lokal ausführe und curl-Befehle über mein Terminal sende. Der Code, den ich versuche, mich in meiner App anzumelden, verwendet das HTTP-Juwel und gibt {"status":500,"error":"Internal Server Error"}
zurück.
Also, das ist das erste Mal, dass ich versuche, mich mit irgendeinem API-Endpunkt zu verbinden, also fliege ich hier ein wenig im Dunkeln. Was ich über einen 500-Fehler gelesen habe, ist: "Wenn alles andere fehlschlägt, wird im Allgemeinen eine 500-Antwort verwendet, wenn die Verarbeitung aufgrund unvorhergesehener Umstände auf der Serverseite fehlschlägt, wodurch der Server einen Fehler verursacht." Was klingt ein wenig wie ein Catch-All für etwas kaputt, aber wir wissen nicht was, außer es ist auf dem Backend. Bitte korrigieren Sie mich, falls ich falsch liege.
Was mache ich als nächstes?
Dies ist der curl Befehl Ich bin mit eine E-Mail und Passwort senden zu empfangen und auth_token:
{"auth_token":"628f3ebc47193665e7f1d32ae41ff9a7"}%
Dies ist der Code, den ich: Ich habe diesen zurück
curl -d "user_login[email][email protected]&user_login[password]=password123" http://localhost:3000/api/v1/sign-in
Wie erwartet Ich benutze HTTParty, um eine Verbindung zu meinem API herzustellen, wenn ich mit Heroku in der Produktion arbeite:
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
Dies ist die Antwort zurück:
{"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"]}
auf meine Fragen zu wiederholen sind, was kann ich von dieser Antwort nehmen weiter untersuchen zu beginnen? Welche Fragen sollte ich mir stellen, wenn das passiert?
Zweitens, was habe ich falsch gemacht?
Vielen Dank im Voraus für Ihre Hilfe.
Edit:
Ein kurzes Update ist, dass ich die Locke Befehl ausgeführt wurde, die lokal mit der tatsächlichen URL für meine Produktionsstätte gearbeitet und es hat funktioniert genau so, wie es vor Ort der Fall ist. Ich komme immer noch nicht dazu, mit HTTParty weiter zu kommen.
überprüfte ich meine heroku logs
und fanden diese:
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'
Welche 7 meiner SessionsController Linie zeigt:
...
6 def create
7 resource = User.find_for_database_authentication(:email => params[:user_login][:email])
8 return invalid_login_attempt unless resource
...
Linie 7 hat zwei Arrays drin, aber ich bin nicht sicher, wie sie in der Httpary-Anfrage leer sind und nur in der Curl-Anfrage finden.
'params [: user_login] [: email]' -> 'params [: E-Mail] 'weil' {"email" => "[email protected]", "password" => "[FILTERED]"} 'hat kein': user_login' – phoet
Danke für das Kommentieren. Ich habe eine Weile gebraucht, um herauszufinden, wie ich das: user_login bereitstellen kann. – Lenocam