2016-08-02 9 views
1

ring-json을 사용하여 json 데이터를 프런트 엔드에 전달하여 시약을 사용하여 일부 d3 차트를 렌더링합니다. 나는 로컬 작업 간단한 프로젝트를 했어,하지만 난 Heroku가에 배치 때합니다 (Heroku가 로그에서) 다음과 같은 오류가있어 :heroku에서 ring-json을 사용할 때 "java.lang.Exception : Unrecognized body"가 표시됨

2016-08-01T15:50:38.955857+00:00 app[web.1]: java.lang.Exception: Unrecognized body: [{:key "GB", :values [{:y 2.4555984, :x 2002} {:y 2.519768, :x 2004} {:y 2.4532163, :x 2006} {:y 2.420068, :x 2008} {:y 2.464492, :x 2010} {:y 2.321085, :x 2012}]} {:key "ES", :values [{:y 2.2434933, :x 2002} {:y 2.34095, :x 2004} {:y 2.1764393, :x 2006} {:y 2.0458074, :x 2008} {:y 2.1055703, :x 2010} {:y 2.041821, :x 2012}]} {:key "DE", :values [{:y 2.3088598, :x 2002} {:y 2.3240418, :x 2004} {:y 2.414952, :x 2006} {:y 2.2453654, :x 2008} {:y 2.2269878, :x 2010} {:y 2.1301556, :x 2012}]} {:key "FR", :values [{:y 2.292432, :x 2002} {:y 2.6937985, :x 2004} {:y 2.2779455, :x 2006} {:y 2.3077664, :x 2008} {:y 2.390625, :x 2010} {:y 2.3109756, :x 2012}]} {:key "HU", :values [{:y 2.5220544, :x 2002} {:y 2.570761, :x 2004} {:y 2.7397892, :x 2006} {:y 3.0420985, :x 2008} {:y 2.8456118, :x 2010} {:y 2.5978153, :x 2012}]} {:key "FI", :values [{:y 2.3738055, :x 2002} {:y 2.4264107, :x 2004} {:y 3.1687763, :x 2006} {:y 3.2200456, :x 2008} {:y 3.2385516, :x 2010} {:y 2.240783, :x 2012}]} {:key "PT", :values [{:y 2.8570483, :x 2002} {:y 2.8615985, :x 2004} {:y 2.649865, :x 2006} {:y 2.7748206, :x 2008} {:y 2.8316278, :x 2010} {:y 2.8707578, :x 2012}]} {:key "SE", :values [{:y 2.7565827, :x 2002} {:y 2.7382352, :x 2004} {:y 3.7057602, :x 2006} {:y 3.5786886, :x 2008} {:y 2.478958, :x 2010} {:y 2.2799134, :x 2012}]}] 
2016-08-01T15:50:38.955860+00:00 app[web.1]: at ring.util.servlet$update_servlet_response.invokeStatic(servlet.clj:115) 
2016-08-01T15:50:38.955859+00:00 app[web.1]: at ring.util.servlet$set_body.invoke(servlet.clj:84) 
2016-08-01T15:50:38.955861+00:00 app[web.1]: at ring.adapter.jetty$proxy_handler$fn__3274.invoke(jetty.clj:26) 
2016-08-01T15:50:38.955861+00:00 app[web.1]: at ring.util.servlet$update_servlet_response.invoke(servlet.clj:107) 
2016-08-01T15:50:38.955863+00:00 app[web.1]: at ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source) 
2016-08-01T15:50:38.955865+00:00 app[web.1]: at org.eclipse.jetty.server.Server.handle(Server.java:497) 
2016-08-01T15:50:38.955858+00:00 app[web.1]: at ring.util.servlet$set_body.invokeStatic(servlet.clj:105) 
2016-08-01T15:50:38.955864+00:00 app[web.1]: at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
2016-08-01T15:50:38.955867+00:00 app[web.1]: at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
2016-08-01T15:50:38.955869+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:745) 
2016-08-01T15:50:38.955866+00:00 app[web.1]: at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
2016-08-01T15:50:38.955868+00:00 app[web.1]: at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
2016-08-01T15:50:38.955866+00:00 app[web.1]: at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
2016-08-01T15:50:38.955865+00:00 app[web.1]: at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 

나는이 시작하는 위치를 모르겠어요합니다. 나는 그것이 ring-json의 문제라고 확신하지 않는다. 아마도 헤더를 어딘가에 설정해야할까요?

도움을 주시면 감사하겠습니다. 일시적으로 여기 heroku에서 실행되는 프로젝트에 대한 링크가 있습니다 : https://esd-viz.herokuapp.com/. 프로젝트 자체는 http://github.com/ezmiller/esd-viz입니다.

+0

'java $ JVM_OPTS -cp target/esd-viz.jar clojure.main -m esd-viz.server' (Procfile에서)를 사용하여 로컬로 시작할 때 어떤 일이 발생합니까? –

+0

사실 그것은 이미 Procfile에있는 명령입니다. – fraxture

+0

왜 그 질문을 @MichielBorkent로 했습니까? 너의 생각은 어땠 니? – fraxture

답변

4
lein uberjar 
heroku local web 

로컬로 테스트하는 가장 좋은 방법은 Procfile에서 스택을 실행합니다. (기본적으로 포트 5000에있는 호스트). 이것은 나를 위해 문제를 재현한다.

원인에 관해서는 ... 문제는 여기에 있습니다 :

33 (def load-data 
34 {:status 200 
35 :body (essdata/get-json-data)}) 

당신이 반환하는 몸은 당신이 그것을 처리하는 미들웨어를하지 않는 한 유효하지 않은 벡터이다. 반지 - 기본값이 올바르게 설정 되었습니까?

당신은 비교할 경우

env/dev/clj/esd_viz/middleware.clj 
env/prod/clj/esd_viz/middleware.clj 

당신은하지만 자극에서, 당신은 JSON 미들웨어가 DEV에서 볼 수 있습니다.

따라서 prod 프로필로 실행하면 벡터는 dev에있는 것처럼 JSON으로 변환되지 않습니다.

+0

그게 전부라고 생각합니다! 그런 식으로 파일이 분리되었다는 것을 전혀 알지 못했습니다. 삐죽 거리는 미들웨어 구성에 ring-json을 추가하여 수정하려고합니다. – fraxture

+0

우. 이제는 더 이상한 오류가 발생합니다 : https://s3.amazonaws.com/ezmiller/public/images/localhost5000_2016-08-04_22-14-58.png – fraxture

+0

고급 편집입니다. 이제 프로덕션 빌드가 공백을 대신 사용하도록 설정하십시오 (나중에 변경할 수 있지만 먼저 작업하게하십시오). –