3

私が持っているスタック トレースには、コードへの参照が含まれていません。ここで何が間違っているのかを見つける方法がわかりません:

LazySeq.java:47 clojure.lang.LazySeq.sval
LazySeq.java:56 clojure.lang.LazySeq.seq
Cons.java:39    clojure.lang.Cons.next
RT.java:560 clojure.lang.RT.next
core.clj:61 clojure.core/next
core.clj:461    clojure.core/str$fn[fn]
core.clj:463    clojure.core/str
RestFn.java:140 clojure.lang.RestFn.applyTo
core.clj:540    clojure.core/apply
core.clj:90 hiccup.core/eval460$fn[fn]
MultiFn.java:163    clojure.lang.MultiFn.invoke
Var.java:365    clojure.lang.Var.invoke
stacktrace.clj:26   ring.middleware.stacktrace/html-ex-view
stacktrace.clj:40   ring.middleware.stacktrace/html-ex-response
stacktrace.clj:51   ring.middleware.stacktrace/ex-response
stacktrace.clj:61   ring.middleware.stacktrace/wrap-stacktrace$fn[fn]
reload_modified.clj:15  ring.middleware.reload-modified/wrap-reload-modified$fn[fn]
stacktrace.clj:59   ring.middleware.stacktrace/wrap-stacktrace$fn[fn]
jetty.clj:17    ring.adapter.jetty/proxy-handler$fn[fn]
(Unknown Source)        ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle
HandlerWrapper.java:152 org.mortbay.jetty.handler.HandlerWrapper.handle
Server.java:324 org.mortbay.jetty.Server.handle
HttpConnection.java:534 org.mortbay.jetty.HttpConnection.handleRequest
HttpConnection.java:879 org.mortbay.jetty.HttpConnection$RequestHandler.content
HttpParser.java:741 org.mortbay.jetty.HttpParser.parseNext
HttpParser.java:213 org.mortbay.jetty.HttpParser.parseAvailable
HttpConnection.java:403 org.mortbay.jetty.HttpConnection.handle
SocketConnector.java:228    org.mortbay.jetty.bio.SocketConnector$Connection.run
QueuedThreadPool.java:522   org.mortbay.thread.QueuedThreadPool$PoolThread.run

これは、フォームの送信後に発生します。コントローラーはレコードをデータベースに書き込み、ページにリダイレクトします。

(defn create-submit [& m]
  (let [p (model/create m)]
      (response/redirect (str "/post/" (:id p)))))

スタック トレースで問題が発生していますが、ページのレンダリングは行われていません。また、ブラウザはリダイレクトされたページではなく元のページを指しているため、リダイレクトは決して起こらないと考えています。

アイデア?

編集:

いくつかのprintlnで、conjにclojureqlを呼び出しているモデル/作成呼び出しまで追跡しました! 新しい記録。最初の println はコンソール ウィンドウに表示されますが、2 番目は表示されません。

(defn create [m] 
    (let [p (new-post-from m)] 
        (println "about to add p to table " (:id p)) 
        (cql/conj! (cql/table :posts) p)
        (println "after adding p to table")
    p)) 
4

1 に答える 1

4

その理由は、ルート定義が次のようになったためです。

(POST "/post/create/submit" (params :params) (post/create-submit))

create-submit 呼び出しにパラメーターを渡す必要があった場所。create-submit パラメーターの定義は だったので、[& m]間違った数のパラメーターについて文句を言うことはなかったと思います。

訂正: また、呼び出した場所である db.clj ファイルの要件を追加していなかったため、model/create メソッドもスローしていましたcql/open-global

スタック トレースは完全に自明ではありませんでした。cql/conj の下のどこかを指していると思います。接続を確立しようとしている場所。代わりに、まったく意味のないしゃっくりを指していました。

于 2011-08-28T17:30:19.120 に答える