2017-02-03 8 views
1

Итак, я догадался, что не уверен, какой вопрос задавать больше при исследовании моей проблемы. Поэтому, придя сюда, я задаю две вещи.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 и просто найти в запросе завивки.

+0

'Params [: user_login] [: по электронной почте]' -> 'PARAMS [: адрес электронной почты] 'потому что' {"email" => "[email protected]", "password" => "[FILTERED]"} 'не имеет': user_login' – phoet

+0

Благодарим вас за комментирование. Я взял время, чтобы выяснить, как правильно поставить: user_login. – Lenocam

ответ

0

Ответ на мой первый вопрос о том, что я должен делать, если я столкнулся с этой проблемой или, похоже, снова будет проверить журналы Heroku. Это начало раскручивать мои проблемы. Вторая часть этого ответа заключается в том, что даже когда я выяснил, что я не отправлял информацию :user_login, я все еще не мог понять, как исправить мою проблему, поэтому я начал отбрасывать byebug в любое место, связанное с моей проблемой, и спрашиваю какие мои значения переменных были и выполнялся код, чтобы увидеть вывод в консоли. Когда они продолжали возвращаться nil, и я не мог понять, что правильный заказ/способ исправить запрос HTTParty, я начал помещать .methods или .instance_methods после моих переменных, чтобы найти новые способы, чтобы спросить, что происходит здесь. После этого я провел время в консоли rails, используя любые экземпляры, которые были связаны с моими переменными, пока я не скомпоную части.

Ответ на мой второй вопрос, что я делал неправильно? Я не отправлял :user_login, главным образом потому, что я не совсем понял, что он должен был делать (я новичок, я использую много учебников, которые я понимаю, как 95%, это было из 5%) и даже когда я это сделал, я не мог понять, как засунуть его в мою просьбу. Как оказалось, я тоже не использовал :body. Как только я выясню, что мне нужно поставить :body вокруг всех данных, которые я отправлял, мой следующий слой был :user_login, а затем мои :email и :password, что с ретроспективным взглядом выглядит совершенно очевидно.

Это то, что код для входа в мое приложение выглядит следующим образом:

consume_api.rb

require "rubygems" 
require "httparty" 

response = HTTParty.post("https://fake-heroku-94488.herokuapp.com/api/v1/sign-in", :body => {:user_login => {:email => "[email protected]", :password => "password123"}}) 


puts response.body, response.code, response.message, response.headers.inspect 

 Смежные вопросы

  • Нет связанных вопросов^_^