调试pedestal.io应用程序的正确方法是什么?

时间:2013-06-21 07:00:37

标签: clojure clojurescript pedestal

我正在尝试重新实现todo example app以了解它是如何工作的,并且在加载页面时出现错误。我不确定怎么离开这里。我担心的是错误似乎出现在cljs.core

todo-app.simulated.services.receive_messages = (function receive_messages(app){
  return io.pedestal.app.protocols.put_message.call(null,(new cljs.core.Keyword("\uFDD0:input")).call(null,app),cljs.core.PersistentArrayMap.fromArray([io.pedestal.app.messages.type,"\uFDD0:create-todo",io.pedestal.app.messages.topic,cljs.core.PersistentVector.fromArray(["\uFDD0:todo"], true)], true));
});

异常消息是:

Uncaught TypeError: Object function (meta,cnt,arr,__hash){
this.meta = meta;
this.cnt = cnt;
this.arr = arr;
this.__hash = __hash;
this.cljs$lang$protocol_mask$partition1$ = 4;
this.cljs$lang$protocol_mask$partition0$ = 16123663;
} has no method 'fromArray'

我的依赖是:

[[org.clojure/clojure "1.5.1"]
 [org.clojure/clojurescript "0.0-1820"]
 [domina "1.0.1"]
 [ch.qos.logback/logback-classic "1.0.7" :exclusions [org.slf4j/slf4j-api]]
 [io.pedestal/pedestal.app "0.1.9"]
 [io.pedestal/pedestal.app-tools "0.1.9"]]

任何帮助或见解都将不胜感激!

2 个答案:

答案 0 :(得分:1)

我也看到了这个错误,似乎它突然冒出来了。清除out/目录:target-path中的project.clj)会为我修复它。基于此,我认为cljs编译过程和/或基座有一些脱节。

This issue看起来很相似,修复方法类似,所以我认为这是一个cljs构建问题。

一般来说,关于基座调试,我没什么可提供的,但是如果我看到一个似乎在核心库中的错误,我会从假设我的结果出现问题开始。 :)

修改

更多信息,建议每次升级ClojureScript或Pedestal时删除out\目录。

答案 1 :(得分:1)

正如bostonou建议的那样,最好的方法是删除out目录。我目前的方法是使用lein-cljsbuild,我个人通过将其添加到我的用户个人资料中来做到这一点。

您可以致电nano ~/.lein/profiles.clj

我现在看起来像是:

{:user {:plugins [[lein-difftest "2.0.0"]
                  [lein-marginalia "0.7.1"]
                  [lein-pprint "1.1.1"]
                  [lein-swank "1.4.4"]
                  [lein-catnip "0.5.1"]
                  [environ/environ.lein "0.3.0"]
                  [lein-cljsbuild "0.3.2"]]
        :hooks [environ.leiningen.hooks]}}

现在,您可以通过调用项目文件夹中的lein-cljsbuild once来自动构建cljs文件。调用lein-cljsbuild auto可确保在编辑源文件时自动编译它们。

我目前还在:hooks [leiningen.cljsbuild]添加了project.clj,因此调用lein clean也会删除由lein-cljsbuild构建的文件。