Итак, я догадался, что не уверен, какой вопрос задавать больше при исследовании моей проблемы. Поэтому, придя сюда, я задаю две вещи.Json API Curl - запрос HTTParty. Запрос работает на моей локальной машине cURL, но не в производстве Heroku с HTTParty
Во-первых, как я могу узнать о таких проблемах в будущем? Во-вторых, что я делаю неправильно сейчас?
В принципе, я создал приложение и нажал его на Heroku. У этого приложения есть конечные точки API, которые работают точно так, как я ожидаю, когда я запускаю приложение локально и отправляю команды curl через мой терминал. Код, который я запускаю, чтобы попытаться выполнить вход в мое приложение, использует жемчужину HTTP и возвращает {"status":500,"error":"Internal Server Error"}
.
Итак, это мой первый раз, когда я пытаюсь подключиться к любой конечной точке API, поэтому я немного летаю в темноте. То, что я читал о ошибке 500, заключается в следующем: «Когда все остальное не срабатывает, как правило, ответ 500 используется, когда обработка не выполняется из-за непредвиденных обстоятельств на стороне сервера, что приводит к ошибке сервера». Который звучит немного как уловка для всего, что-то сломалось, но мы не знаем, что, кроме того, что это на бэкэнде. Пожалуйста, поправьте меня, если я ошибаюсь.
Что мне делать дальше?
Это локон команда Я бегу, чтобы отправить электронную почту и пароль, чтобы получить и auth_token:
curl -d "user_login[email][email protected]&user_login[password]=password123" http://localhost:3000/api/v1/sign-in
Как и ожидалось, я получаю это обратно:
{"auth_token":"628f3ebc47193665e7f1d32ae41ff9a7"}%
Это код, который я работа с HTTParty, чтобы попытаться подключиться к моему API в производстве с использованием 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
Это ответ обратно:
{"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"]}
Чтобы подтвердить мои вопросы, что я могу взять из этого ответа, чтобы начать исследовать дальше? Какие вопросы я должен задать себе, когда это произойдет?
Во-вторых, Что я сделал неправильно?
Заранее за вашу помощь.
Edit:
Быстрое обновление является то, что я запускал локон команду, которая работала на местном уровне с реальным URL для моего нового производства, и она работала именно так, как это делает на местном уровне. Я до сих пор не могу больше использовать HTTParty.
Я проверил мой heroku logs
и нашел это:
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'
который указывает на линию 7 моего SessionsController:
...
6 def create
7 resource = User.find_for_database_authentication(:email => params[:user_login][:email])
8 return invalid_login_attempt unless resource
...
Line 7 имеет два массива в нем, но я не уверен, как они пусты в запросе Httpary и просто найти в запросе завивки.
'Params [: user_login] [: по электронной почте]' -> 'PARAMS [: адрес электронной почты] 'потому что' {"email" => "[email protected]", "password" => "[FILTERED]"} 'не имеет': user_login' – phoet
Благодарим вас за комментирование. Я взял время, чтобы выяснить, как правильно поставить: user_login. – Lenocam