【问题标题】:What's the correct approach to debugging a pedestal.io app?调试 pedestal.io 应用程序的正确方法是什么?
【发布时间】:2013-06-18 05:48:57
【问题描述】:

我目前正在尝试重新实现 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"]]

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

【问题讨论】:

    标签: clojure clojurescript pedestal


    【解决方案1】:

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

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

    一般来说,关于基座调试,我没有太多可以提供的信息,但是如果我看到一个似乎在核心库中的错误,我会假设我的结果有问题。 :)

    编辑

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

    【讨论】:

      【解决方案2】:

      正如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 构建的文件。

      【讨论】:

        最近更新 更多