Json API Curl到HTTParty请求。该请求在我的本地机器上使用cURL,但在使用HTTParty的Heroku生产中不起作用

时间:2017-02-03 15:40:26

标签: ruby-on-rails json curl heroku httparty

所以,我已经明白,在研究我的问题时,我不确定要问什么问题。所以来到这里,我要问两件事。

首先,我如何在将来调查此类问题? 第二,我现在做错了什么?

基本上,我创建了一个应用程序并将其推送到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请求中找到。

1 个答案:

答案 0 :(得分:0)

我第一个问题的答案是,如果我遇到这个问题或者再次讨论这个问题,我应该怎么做才能查看Heroku日志。这开始解决我的问题。这个答案的第二部分是,即使我发现我没有发送:user_login信息,我仍然无法弄清楚如何解决我的问题,所以我开始放弃{ {1}}进入与我的问题相关的任何地方,询问我的变量值是什么,并运行代码以查看控制台中的输出。当他们不断回来byebug而我无法弄清楚HTTParty请求的正确顺序/方式时,我开始使用 nil 我的变量之后.methods 找到更多方法来询问这里发生了什么。之后我花了一些时间在rails控制台中,使用与我的变量相关联的任何instance_methods,直到我把它们放在一起。

我的第二个问题的答案,我做错了什么?我没有发送.instance_methods,主要是因为我不太明白它应该做什么(我是新的,我使用了很多我理解的教程,如95 %,这是来自5%)甚至当我这样做时,我无法弄清楚如何在我的请求中推它。事实证明,我也没有适当地使用:user_login。一旦我发现我需要将:body放在我发送的所有数据周围,我的下一个图层就是:body,然后是我的:user_login:email,事后看来,这看起来非常明显。

这是登录我的应用程序的代码:

consume_api.rb

:password