1

dev_appserver.shでwebapp(appengine-magicとleinで作成)を動作させましたが、より多くの対話性が必要であり、サーバーの再起動が少ないため、replを使用することを好みます。問題は、アプリケーションを提供しようとした後(require '[appengine-magic.core :as ae])、次の例外が発生することです。(use 'myapp.core)(ae/serve myapp)

[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)

(in-ns'myapp.core)も試しましたが、同じ効果があります。Webアプリハンドラーをreplに直接貼り付けて提供すると、機能しますが、ファイルからは機能しません。

myappまたはmyapp-handlerを呼び出すと、明らかに「オブジェクト」が得られるので、実際には正しい名前空間にいる必要があります...

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)
4

3 に答える 3

0

どのような担当者を使用していますか?私はあなたのプロジェクトを複製しましたが、追加しました

[swank-clojure"1.3.0-SNAPSHOT"]

:dev-dependenciesに。lein swankコマンドを使用してスライムreplを開始し、slime-connectを使用してemacsから接続します。次に、あなたと同じコマンドを使用しました。つまり、(require'[appengine-magic.core:as ae])、(use' myapp.core)、および(ae / serve myapp)は正常に機能します。

乾杯、コリン

于 2011-04-06T08:51:30.367 に答える
0

(ae / serve myapp)を呼び出す前に、プロジェクトフォルダーで「leinclean」を実行してみてください。

問題を引き起こしているコードをAOTコンパイルしているときにも同様の問題が発生しました。私はこれについてappengine-magicの作成者と話し合い、彼はそれを解決するleincleanを実行してAOTコンパイル済みクラスを削除することを提案しました。

于 2011-04-17T15:33:41.140 に答える
0

この症状(のNPE )は、マクロによって作成された変数ではなくjava.io.File.<init>、ハンドラー変数を誤って渡した場合にも発生する可能性があります。ae/servedef-appengine-app

于 2014-12-06T16:26:28.317 に答える