如何在Rails 3.1中调试PUT请求?

时间:2011-12-19 19:06:44

标签: mysql ruby-on-rails ios restkit

我正在开发一个简单的iOS应用程序,它使用Rails应用程序作为服务器后端。我使用Restkit框架来管理服务器网络/请求,并且在iOS方面似乎都没问题。

当我发出PUT请求时,我得到200响应,而XCode中的日志似乎表明一切都很好。当我查看Rails应用程序的日志时,它似乎也表明一切都很好,具有以下输出:

2011-12-19T18:15:17+00:00 app[web.1]: Started PUT "/lists/3/tasks/6" for 109.156.183.65 at 2011-12-19 18:15:17 +0000
2011-12-19T18:15:17+00:00 app[web.1]:   Parameters: {"created_at"=>"2011-12-12 22:37:00 +0000", "id"=>"6", "updated_at"=>"2011-12-12 22:37:00 +0000", "description"=>"Create a home page", "list_id"=>"3", "completed"=>"1"}
2011-12-19T18:15:17+00:00 app[web.1]:   Task Load (4.3ms)  SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = $1 LIMIT 1  [["id", "6"]]
2011-12-19T18:15:17+00:00 app[web.1]:   Processing by TasksController#update as JSON
2011-12-19T18:15:17+00:00 app[web.1]:    (4.7ms)  BEGIN
2011-12-19T18:15:17+00:00 app[web.1]:    (1.5ms)  COMMIT
2011-12-19T18:15:17+00:00 app[web.1]: Completed 200 OK in 48ms (Views: 1.1ms | ActiveRecord: 16.0ms)
2011-12-19T18:15:17+00:00 heroku[nginx]: 109.156.183.65 - - [19/Dec/2011:10:15:17 -0800] "PUT /lists/3/tasks/6 HTTP/1.1" 200 154 "-" "TaskM8/1.0 CFNetwork/485.13.9 Darwin/11.2.0" taskm8.com
2011-12-19T18:15:17+00:00 heroku[router]: PUT taskm8.com/lists/3/tasks/6 dyno=web.1 queue=0 wait=0ms service=114ms status=200 bytes=154

但是,当我发出另一个get请求,或使用标准Web视图来查看数据时,我期望从PUT请求(Completed = 1 - 这是BOOL字段)的更改,没有进行任何更改

我可以从rails日志中看到我的iOS应用程序正在传递正确的参数,所以它似乎是铁路方面的东西。我已经完成了克服CSRF错误消息的循环,所以不要认为这是错误的。

在rails应用程序的本地版本上,我还针对MySql数据库运行常规日志记录,以监视正在运行的查询,尝试查看PUT是否执行任何操作,或者任何会失败的内容。在日志中,你看不到以下任何内容:

 BEGIN
 COMMIT

与rails log相同。

那么,有没有人知道为什么PUT没有对数据进行更改,或者我如何进一步调试PUT?

道歉,如果这是一个真正简单的问题,我会慢慢回到开发阶段并且有点生疏!

2 个答案:

答案 0 :(得分:0)

如果您可以控制MySQL服务器,我建议您启用general lo g又称查询日志,这样您就可以看到实际发生的情况。

SET GLOBAL general_log_file = '/tmp/query.log'
SET GLOBAL general_log = 'ON';

答案 1 :(得分:0)

您是否正在使用任何类型的自动化测试?如果没有,从那里开始。

另一种方式(虽然是垃圾)是从网页调用你的控制器动作,看它是否有效。

您还可以在rails代码中添加logger.debug以添加跟踪。