在我的rails应用程序中,我有一个有很多Versions
的Item
模型。我的控制器有一个versions
动作。
def versions
@item = Item.find(params[:id])
respond_to do |format|
format.json { render json: @item.versions }
end
end
每当我请求版本时,有些条目会成功返回,有些则不会。但当我进入控制台时,我可以毫无问题地获取所有条目的版本。
成功(返回JSON版本数组):
Started GET "/api/versions/4.json?"
Processing by ItemsController#versions as JSON
Parameters: {"id"=>"4"}
Completed 200 OK in 106ms (Views: 0.1ms | ActiveRecord: 19.8ms)
app[web.1]: cache: [GET /api/versions/4.json?] miss
heroku[router]: GET x.x.com/api/versions/4.json? dyno=web.1 queue=0 wait=0ms service=113ms status=200 bytes=831
不成功(返回两个响应,均为200状态,无JSON数据):
Started GET "/api/versions/1.json?"
Processing by ItemsController#versions as JSON
Parameters: {"id"=>"1"}
Completed 200 OK in 249ms (Views: 0.1ms | ActiveRecord: 162.9ms)
app[web.1]: cache: [GET /api/versions/1.json?] miss
heroku[router]: GET x.x.com/api/versions/1.json? dyno=web.1 queue=0 wait=0ms service=257ms status=200 bytes=3540
你知道这是什么原因吗?我不知道如何在Heroku上记录SQL,所以我没有想法。
发布于 2012-08-28 05:34:01
这实际上是客户端的一个错误。在iOS上,我在connection:didReceiveData:
中处理返回的数据,它(在返回大块数据时)被多次调用,结果是不完整的。为了解决这个问题,我将该回调中的所有部分结果连接起来,并在connectionDidFinishLoading:
中处理数据。愚蠢的错误,与Heroku或Rails无关。
谢谢你的帮助克雷格。
发布于 2012-08-28 02:58:55
重新启动SQL日志记录:在打开每个连接时发出SQL SET log_statement='all';
来启用语句日志记录。然后检查Pg的Heroku日志,看看发生了什么。
heroku logs --ps postgres
请参见:
这不会记录查询结果,只会记录查询文本、查询参数和错误/成功。
要处理结果日志,您需要在您的应用程序中进行;只需将消息打印到stderr,Heroku会将它们添加到应用程序日志中,这样您就可以通过heroku logs
获取它们。
无论如何,您当前的代码看起来不可靠。循环遍历结果集并发出json感觉是错误的:
相反,将查找的结果保存到一个变量中。然后正确处理丢失的结果:在RPC中,您可能会报告RESTful状态404 Not Found
;在更具RPC式风格的API中,您将返回一个空的JSON文档,或者返回一个带有某种“未找到”标志的JSON文档,并报告200 OK
状态。
https://stackoverflow.com/questions/12152188
复制相似问题