2011-12-19 2 views
2

Rails 앱을 서버 백엔드로 사용하는 간단한 iOS 앱을 개발 중입니다. 저는 서버 네트워킹/요청 관리를 위해 Restkit 프레임 워크를 사용하고 있습니다. 그리고 iOS 측에서 모두 괜찮은 것 같습니다.Rails 3.1에서 PUT 요청을 디버깅하려면 어떻게해야합니까?

내가 PUT 요청을하면 200 개의 응답이 다시 생기고 XCode의 로그가 모두 정상이라고 보입니다. 그러나

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 

, 내가 다른 가져 오기 요청을 만들거나보고 표준 웹 뷰를 사용 : 나는 레일 응용 프로그램에 대한 로그를 볼 때, 또한 모든 다음과 같은 출력으로 잘 제시하는 것 데이터, PUT 요청 (BOOL 필드 인 Completed = 1)에서 예상했던 변경 사항은 변경되지 않았습니다.

레일 로그에서 내 iOS 앱이 올바른 매개 변수를 전달한다는 것을 알 수 있으므로 레일 측면에있는 것으로 보입니다. 나는 CSRF 오류 메시지를 극복하는 루프를 겪어 왔으므로 그렇게 생각하지 마십시오.

레일즈 앱의 로컬 버전에서는 MySql 데이터베이스에 대해 일반적인 로깅을 실행하여 실행중인 쿼리를 모니터링하고 PUT이 전혀 수행하지 않는지 확인하거나 실패하는 경우를 확인합니다. 로그에 다음과 같은 내용이 표시되지 않습니다.

BEGIN 
COMMIT 

레일 로그와 동일합니다.

그래서 PUT이 데이터를 변경하지 않는 이유 또는 PUT을 더 디버깅 할 수있는 방법에 대해 알고있는 사람이 있습니까?

정말 간단한 질문 인 경우 사과드립니다. 천천히 개발로 돌아가서 약간 녹슬 었습니다.

답변

0

어떤 종류의 자동화 된 테스트를 사용하고 있습니까? 그렇지 않다면 거기에서 시작하십시오.

또 다른 방법 (쓰레기)은 웹 페이지에서 컨트롤러 작업을 호출하고 작동하는지 확인하는 것입니다.

레일 코드에 logger.debug을 추가하여 흔적을 추가 할 수도 있습니다.

+0

Dominic에게 감사드립니다. logger.debug는 아무것도 추가하지 않는 것 같습니다. 로그 출력은 이전과 동일합니다. 로그 레벨이 개발 환경에서 이미 디버그 되었기 때문에 가정합니다. 브라우저를 통해 클래식 레일 편집보기를 사용한 다음 PUT 호출을 제출하면 정상적으로 작동합니다 ... 자동화 된 테스트를 사용하지 않고 좋은 문서의 포인터를 살펴볼 것입니다. 시작하기? –

+0

Hmmm, 실제로 ... 브라우저에서 편집보기를 사용할 때 put은 동일한 방식으로 호출되지만 어떤 이유로 Update SQL이 호출됩니다 ... 내 문제는 중첩 된 모델과 관련이 있다고 생각합니다. 브라우저 버전에 추가 매개 변수가 표시됩니다. Parameters : { "commit"=> "Update Task", "authenticity_token"=> "5AmRnSsqrOlVrgHlENOdage8TZkwR6QPInOUHATUjv8 =", "utf8"=> "\ 342 \ 234 \ 223", "id"=> "4", "list_id"= > "6", "task"=> "완료"=> "1", "list_id"=> "6", "description"=> "하루 종일 좋은 소년이 되십시오"}} –

+0

'logger. debug'는 플래그가 아니며,'logger.debug '와 같이 당신이 기록하고자하는 것을 넘겨야하는 곳입니다. ======= 내 디버그 추적 ======= " –

0

MySQL 서버를 제어 할 수 있다면 실제로 쿼리 로그를 통해 general lo g 쿼리 로그를 사용하도록 설정하는 것이 좋습니다.

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

감사합니다. Andreas - 언급했듯이, 이미 해봤지만 ... 일반적인 로그에서 시작합니다. –

관련 문제