【发布时间】:2017-02-03 15:40:26
【问题描述】:
所以,我已经到了在研究我的问题时不知道该问什么问题的地步了。所以来到这里,我问了两件事。
首先,我以后如何调查此类问题? 第二,我现在做错了什么?
基本上,我创建了一个应用程序并将其推送到 Heroku。当我在本地运行应用程序并通过终端发送 curl 命令时,该应用程序的 API 端点完全按照我的预期工作。我正在运行以尝试登录我的应用程序的代码使用 HTTP gem 并返回 {"status":500,"error":"Internal Server Error"}。
所以,这是我第一次尝试连接到任何 API 端点,所以我在这里有点摸不着头脑。我读到的关于 500 错误的内容是,“当所有其他方法都失败时;通常,由于服务器端的意外情况导致处理失败时使用 500 响应,这会导致服务器出错。”这听起来有点像一个包罗万象的东西,但我们不知道是什么,除了它在后端。如果我错了,请纠正我。
接下来我该怎么做?
这是我正在运行的 curl 命令,用于发送电子邮件和密码以接收和 auth_token:
curl -d "user_login[email]=fake@email.com&user_login[password]=password123" http://localhost:3000/api/v1/sign-in
正如预期的那样,我得到了这个:
{"auth_token":"628f3ebc47193665e7f1d32ae41ff9a7"}%
这是我使用 HTTParty 运行的代码,用于尝试使用 Heroku 在生产环境中连接我的 API:
consume_api.rb
require "rubygems"
require "httparty"
query_hash = { :user_login => "fake@email.com",
: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"]}
重申我的问题是,我可以从这个回复中得到什么来开始进一步调查?发生这种情况时我应该问自己什么问题?
第二,我做错了什么?
提前感谢您的帮助。
编辑:
一个快速的更新是,我运行了 curl 命令,该命令在本地与我的生产站点的实际 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"=>"fake@email.com", "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'
这指向我的 SessionsController 的第 7 行:
...
6 def create
7 resource = User.find_for_database_authentication(:email => params[:user_login][:email])
8 return invalid_login_attempt unless resource
...
第 7 行中有两个数组,但我不确定它们在 Httpary 请求中如何为空,只是在 curl 请求中找到。
【问题讨论】:
-
params[:user_login][:email]->params[:email]因为{"email"=>"fake@email.com", "password"=>"[FILTERED]"}没有:user_login -
感谢您的评论。我花了一段时间才弄清楚如何适当地提供 :user_login。
标签: ruby-on-rails json curl heroku httparty