小编Twi*_*ice的帖子

查找 ref-to-many 属性包含输入的所有元素的实体

假设我有entry具有 ref-to-many 属性的实体:entry/groups。我应该如何构建查询以查找其:entry/groups属性包含所有输入外部 ID 的实体?

下一个伪代码将更好地说明我的问题:

[2 3] ; having this as input foreign ids

;; and having these entry entities in db
[{:entry/id "A" :entry/groups  [2 3 4]}  
 {:entry/id "B" :entry/groups  [2]}     
 {:entry/id "C" :entry/groups  [2 3]}  
 {:entry/id "D" :entry/groups  [1 2 3]}
 {:entry/id "E" :entry/groups  [2 4]}] 

;; only A, C, D should be pulled
Run Code Online (Sandbox Code Playgroud)

作为 Datomic/Datalog 的新手,我用尽了所有选项,因此感谢您提供任何帮助。谢谢!

clojure datalog datomic

6
推荐指数
1
解决办法
719
查看次数

ClojureScript针对多页面Web应用程序的独立构建

我有一个在后端使用Clojure和在前端使用ClojureScript的Web应用程序,它由几个页面组成,每个页面都需要适当的构建js文件.

现在我知道cljsbuild可以构建单独的构建(如果在: config文件的build部分中指定),前提是每个构建都有自己的文件夹.

问题是:现在我需要在每个文件夹中复制一些共享代码才能正确构建.除此之外,我必须为即使是简单的cljs文件创建全新的文件夹,更不用说每次我的project.clj 的:builds部分都要编辑.

所以,它是2016年,到目前为止,我所见过的关于ClojureScript的所有教程都是针对单页应用程序的.我正在寻找什么资源或最佳实践,我错过了什么?

如何在标准的多页Clojure堆栈Web应用程序中使用ClojureScript?

谢谢.

clojure clojurescript cljsbuild

5
推荐指数
1
解决办法
208
查看次数

使用ring.utils.io中的管道输入流来提供文件

我需要根据需要即时创建excel文件,并使用clojure.ring通过响应将其提供给用户。

我使用docjure创建一个excel文件并将其写入输出流(请参见以下函数:https : //github.com/mjul/docjure/blob/master/src/dk/ative/docjure/spreadsheet.clj#L86) ,然后从中获得输出流piped-input-stream(请参阅https://github.com/ring-clojure/ring/blob/1.5.0/ring-core/src/ring/util/io.clj#L11)。

代码的相关部分:

(defn excel-response
  [params]
  (-> (response (piped-input-stream (fn [out-stream]
                                  (create-excel-into-stream out-stream
                                                            params))))
      (assoc :headers {"Content-Type"
                       "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})))
Run Code Online (Sandbox Code Playgroud)

使用此功能,由于某些原因,我总是得到一个空的.xlsx文件。piped-input-stream在我可以将其用作响应主体之前,似乎已经结束。

我如何正确使用它,以便可以写入输出流,将其传递给输入流,然后用作响应主体?

clojure ring

5
推荐指数
1
解决办法
692
查看次数

剂量q的clojure头保留,运行!循环

Clojure初学者/中级,

我有一个大的XML文件(~240M),我需要逐项处理ETL目的.有一些run-processing功能,它有许多副作用,数据库交互,写入日志等.

当我将所述函数应用于文件时,一切运行顺利:

...
(with-open [source (-> "in.xml"
                       io/file
                       io/input-stream)]
   (-> source
       xml/parse
       ((fn [x]
          ;; runs fine
          (run-processing conn config x)))))
Run Code Online (Sandbox Code Playgroud)

但是当我将相同的函数放入任何类型的循环(例如doseq)时,我得到OutOfMemoryException(GC Overhead).

...
(with-open [source (-> "in.xml"
                       io/file
                       io/input-stream)]
  (-> source
      xml/parse
      ((fn [x]
         ;; throws OOM GC overhead exception
         (doseq [i [0]]
            (run-processing conn config x))))))
Run Code Online (Sandbox Code Playgroud)

我不明白,头部保留在哪里导致GC开销异常?我已经尝试过run!,甚至loop recur没有doseq- 同样的事情发生了.

我的run-processing功能一定有问题吗?那么为什么我直接运行时表现良好?有点困惑,任何帮助是指定的.

clojure out-of-memory lazy-sequences

5
推荐指数
1
解决办法
357
查看次数

在Compojure中绕过链的自定义中间件

我正在尝试编写一个自定义中间件,通过检查请求中是否存在以下内容来检查用户是否已通过身份验证.

(defn wrap-authenticated [handler]
  (fn [{user :user :as req}]
    (if (nil? user)
      (do 
        (println "unauthorized")
        {:status 401 :body "Unauthorized." :headers {:content-type "text/text"}})
      (handler req))))

(def app
  (wrap-authenticated (wrap-defaults app-routes (assoc site-defaults :security false))))
Run Code Online (Sandbox Code Playgroud)

但是当我尝试返回401状态的响应hashmap时,我得到以下异常: WARN:oejs.AbstractHttpConnection:/ main java.lang.ClassCastException:clojure.lang.Keyword无法强制转换为java.lang.String

也许我不理解在Compojure中间件中需要实现的逻辑.如何编写破坏中间件链的中间件,只返回自定义响应或重定向到处理程序?

clojure compojure ring

2
推荐指数
1
解决办法
154
查看次数