2011-04-05 4 views
1

devappserver.sh에서 작동하는 webapp (appengine-magic 및 lein으로 작성)을 webapp로 가져 왔지만 더 많은 상호 작용이 필요하고 repl을 사용하는 서버를 다시 시작할 필요가 없어졌습니다. (에서-NS 'myapp.core) 나는 또한 시도거의 만족했지만 repl에 null 포인터가 생겼습니다.

[Thrown class java.lang.NullPointerException] 

Backtrace: 
    0: java.io.File.<init>(File.java:360) 
    1: sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    2: sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    3: sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    4: java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    5: clojure.lang.Reflector.invokeConstructor(Reflector.java:160) 
    6: appengine_magic.core$start.doInvoke(core_local.clj:85) 
    7: clojure.lang.RestFn.invoke(RestFn.java:439) 
    8: appengine_magic.core$serve.doInvoke(core_local.clj:139) 
    9: clojure.lang.RestFn.invoke(RestFn.java:410) 
10: user$eval2264.invoke(NO_SOURCE_FILE:1) 
11: clojure.lang.Compiler.eval(Compiler.java:5424) 
12: clojure.lang.Compiler.eval(Compiler.java:5391) 
13: clojure.core$eval.invoke(core.clj:2382) 
14: swank.commands.basic$eval_region.invoke(basic.clj:47) 
15: swank.commands.basic$eval_region.invoke(basic.clj:37) 
16: swank.commands.basic$eval807$listener_eval__808.invoke(basic.clj:71) 
17: clojure.lang.Var.invoke(Var.java:365) 
18: user$eval2262.invoke(NO_SOURCE_FILE) 
19: clojure.lang.Compiler.eval(Compiler.java:5424) 
20: clojure.lang.Compiler.eval(Compiler.java:5391) 
21: clojure.core$eval.invoke(core.clj:2382) 
22: swank.core$eval_in_emacs_package.invoke(core.clj:92) 
23: swank.core$eval_for_emacs.invoke(core.clj:239) 
24: clojure.lang.Var.invoke(Var.java:373) 
25: clojure.lang.AFn.applyToHelper(AFn.java:167) 
26: clojure.lang.Var.applyTo(Var.java:482) 
27: clojure.core$apply.invoke(core.clj:540) 
28: swank.core$eval_from_control.invoke(core.clj:99) 
29: swank.core$eval_loop.invoke(core.clj:104) 
30: swank.core$spawn_repl_thread$fn__493$fn__494.invoke(core.clj:309) 
31: clojure.lang.AFn.applyToHelper(AFn.java:159) 
32: clojure.lang.AFn.applyTo(AFn.java:151) 
33: clojure.core$apply.invoke(core.clj:540) 
34: swank.core$spawn_repl_thread$fn__493.doInvoke(core.clj:306) 
35: clojure.lang.RestFn.invoke(RestFn.java:397) 
36: clojure.lang.AFn.run(AFn.java:24) 
37: java.lang.Thread.run(Thread.java:680) 

하지만 같은 효과 : 이제 문제는 내가 (require '[appengine-magic.core :as ae]), (use 'myapp.core)을하고 응용 프로그램 (ae/serve myapp)를 제공하려고 후 나는이 예외를 얻을 것이다. repl에 똑바로 웹 응용 프로그램 처리기를 붙여 넣으면 작동하지만 내 파일에서는 작동하지 않습니다. 정말 잘 네임 스페이스에 있어야하므로 MyApp를 또는 myapp와 핸들러는 명확하게 "객체"를 제공 호출

...

project.clj는

(defproject myapp "1.0.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :dependencies [ 
     [org.clojure/clojure "1.2.1"] 
     [compojure "0.6.2"] 
     ] 
    :dev-dependencies [ 
      [appengine-magic "0.4.1"] 
      [ring/ring-devel "0.3.7"] 
      ]) 

core.clj은 단지 간단하다 :

(ns myapp.core 
    (:use compojure.core) 
    (:require [appengine-magic.core :as ae])) 

(defroutes myapp-handler 
    (GET "/" req 
     {:status 200 
     :headers {"Content-Type" "text/plain"} 
     :body "Hello, world!!!"})) 

(ae/def-appengine-app myapp #'myapp-handler) 
+0

아마도 stacktrace (코드를 포함하는 부분)가 많을수록 더 도움이 될 수 있습니다. 프로젝트를 위해 project.clj (leiningen이라고 가정)를 가지고 있다면 이것을 재현하는 것이 더 쉬울 것입니다. –

+0

이것은 emacs에서 얻을 수있는 모든 stacktrace이며 프로젝트 파일은 매우 간단합니다. 랩 재 장전을 위해 링을 devel했지만,이 경우에는 사용하지 마십시오. – MarkokraM

+0

나는이 오류를 해결하는 방법에 관해서도 같은 오류가 발생했다고 말해야한다. – toofarsideways

답변

0

어떤 종류의 repl을 사용하고 있습니까? 나는 당신의 프로젝트를 복제하지만

을 추가 한 [허풍-Clojure의 "1.3.0-SNAPSHOT"] 3에

: DEV-의존성. lein swank 명령을 사용하여 슬라임 repl을 시작한 다음 slime-connect를 사용하여 이맥스에서 연결합니다. 그럼 당신은 즉 ('[에서 appengine-magic.core을 : 같은 AE] (사용 요구)'과 같은 명령을 사용 myapp.core) 및 (AE /이 MyApp를 봉사)가 잘 작동합니다.

건배, 콜린

+0

나는 lein repl과 lein swank를 모두 사용했지만 appengine-magic 라이브러리와 함께 제공된 swank를 사용했습니다. 그리고 이상하게도, 파일에서 모든 코드를 지우고 예제를 그대로 다시 붙여 넣었을 때 더 이상 오류가 없었습니다. PHP에서 몇 번 이상 이상한 동작을 보았습니다. 코어에는 눈에 보이는 오류가 없지만 구문 분석이나 실행은 제대로 작동하지 않습니다. 어쩌면 그 unvisible 문자, 난 몰라 ...하지만 지금은 그 작업은, 정확히 내가 내 질문에 ... – MarkokraM

+0

아주 이상한에 동일한 코드를 제시하지만, 적어도 지금 일하고있어. 희망을 갖고 그것은 그 길을 간다! – colinf

0

(AE /이 MyApp를 봉사)를 호출하기 전에 프로젝트 폴더에서 "깨끗한 lein"를 실행 해보십시오.

문제를 일으키는 코드를 AOT에서 컴파일하는 것과 비슷한 문제가있었습니다. 나는 appengine-magic의 창안자와 이것을 논의했고 그는 그것을 해결 한 lein clean을 실행하여 AOT 컴파일 된 클래스를 제거 할 것을 제안했다.

0

이 증상 (NPE in java.io.File.<init>)은 실수로 예를 들어. def-appengine-app 매크로에 의해 생성 된 var보다는 ae/serve에 대한 처리기 var.

관련 문제