2017-02-03 10 views
1

問題を調査する際に何が質問されたらいいのか分かりません。だからここに来ると、私は2つのことを求めている。Json API CurlからHTTPartyへのリクエスト。リクエストはローカルマシンでcURLで動作しますが、HTTPartyを使用したHerokuプロダクションでは動作しません

まず、このような問題を今後どのように調べるにはどうすればよいですか? 次に、私は今何が間違っていますか?

基本的に、私はアプリを作成し、それをHerokuにプッシュしました。このアプリケーションには、アプリケーションをローカルで実行していて、端末からカールコマンドを送信しているときに、期待通りに機能するAPIエンドポイントがあります。私のアプリケーションにサインインしようとしているコードは、HTTP宝石を使って{"status":500,"error":"Internal Server Error"}を返しています。

これは初めてAPIエンドポイントに接続しようとしているので、ここでは暗い場所で少し飛んでいます。私が500エラーについて読んだのは、「他のすべてが失敗した場合、一般に、サーバー側で予想外の状況が発生したために処理が失敗した場合、500応答が使用され、サーバーのエラーが発生します。何かのためのキャッチオールのようなビットが壊れているが、我々はそれがバックエンドにある以外、何がわからない。私が間違っているなら、私を修正してください。

次に何をすればよいですか?

これは私がメールアドレスとパスワード受信するとauth_tokenを送信するために実行しているcurlコマンドである:私はこれを取り戻す

curl -d "user_login[email][email protected]&user_login[password]=password123" http://localhost:3000/api/v1/sign-in 

予想通り:

{"auth_token":"628f3ebc47193665e7f1d32ae41ff9a7"}% 

これはコードIでありますHTTPautyを使用して、Herokuを使用して本番環境でAPIに接続しようとしています:

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"]} 

私の質問を繰り返すためには、私はさらに調査を開始するには、この応答から取ることができます何ですか?何が起こったときに私は自分に尋ねるべきですか?

第2に、私は間違って何をしましたか?

ご協力いただきありがとうございます。

編集:

迅速な更新は、私は私の本番サイトの実際のURLをローカルに働いcurlコマンドを実行し、それがローカルにないとして、それは正確に働いていたということです。私はまだHTTPartyを使用してさらに管理することはできません。

は、私は私のheroku logsをチェックアウトし、これを見つけた:

私SessionsControllerの7行目にポイント
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' 

... 
6   def create 
7   resource = User.find_for_database_authentication(:email => params[:user_login][:email]) 
8   return invalid_login_attempt unless resource 
    ... 

7行目はそれに2つの配列を持っているが、私はよく分かりません彼らがHttparyリクエストでどのように空で、カールリクエストで見つけたか

+0

'paramsは[:USER_LOGIN] [:電子メール]' - > 'paramsは[:電子メール] '{" email "=>" [email protected] "、" password "=>" [FILTERED] "}'はありません:user_login' – phoet

+0

コメントありがとうございます。 :user_loginを適切に提供する方法を理解するために私はしばらく時間をとった。 – Lenocam

答えて

0

私がこの問題にぶつかったり、もう一度それにぶつかったらどうしたらいいのか、私の最初の質問への答えはで、尾根ログをチェックしてください。それが私の問題を解き始めました。この回答の2番目の部分は、私が:user_loginの情報を送信していないとわかったとしても、私はまだ問題を解決する方法を見つけることができなかったので、私はbyebugを私の問題に関連してどこかに落とし始めました。私の変数の値は何か、コンソールで出力を見るためにコードを実行しています。彼らがnilに戻ってきて、HTTPartyの要求が正しいかどうかわからなかったので、ここで何が起こっているのかを尋ねる方法が見つかったら、.methodsまたは.instance_methodsを書き始めました。その後、私はレールのコンソールに時間を費やしました。私はそれらの断片をまとめておくまで、私の変数に関連付けられていたinstance_methodsを使用しました。

私の2番目の質問に対する答えは、何が間違っていたのですか?私は:user_loginを送っていませんでした。なぜなら、私はそれが何をすべきかをかなり理解していなかったからです(私は新しいです、私は5%から95%のようなチュートリアルを多く使用します)私がしたときでさえ、私はそれを私の要求に押し込む方法を理解できませんでした。それが判明したので、私も:bodyを適切に使用していませんでした。一度私が送っていたすべてのデータの周りに:bodyを置く必要があることがわかったら、私の次の層は:email:passwordの順に続き、:user_loginとなりました。

これは私のアプリにサインインするためのコードは次のようになります。

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 
関連する問題