1

我真的迷失在这里了。我有一个非常简单的应用程序。它所做的只是将用户插入到我的数据库中的用户表中。我使用 Postgres。代码是

(ns signupper.db (:require [hugsql.core :as hugsql]))
(hugsql/def-db-fns "sql/q.sql")

在 db.clj 所在的目录中,我创建了一个名为 sql 的目录,其中有一个名为 q.sql 的文件。

当我运行 REPL 并输入 (require '[signupper.db :as db]) 时,我收到以下错误消息:

CompilerException clojure.lang.ExceptionInfo: Can not read file: sql/q.sql {}, compiling:(signupper/db.clj:4:1) 

任何人有任何想法?

谢谢。

4

5 回答 5

0

您的sql目录需要在路径上。请检查您的project.clj文件,在 下resource-paths,并验证您的sql目录可通过其中所述的路径之一访问。

如果没有,您可以移动您的sql目录或将路径包含在resource-paths条目中。

于 2018-02-06T09:34:43.873 回答
0

如果您使用的是Leiningen,您应该将您的 sql 文件夹添加:resource-paths到您的密钥下,project.clj如下所示:

(defproject test-project "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]]
  :main ^:skip-aot test-project.core
  :target-path "target/%s"
  :resource-paths ["sql" "resources"]  ; <-- here
  :profiles {:uberjar {:aot :all}})
于 2018-02-06T11:19:01.363 回答
0

只是有同样的问题。

显然,该函数def-db-fns从文件夹src而不是项目的根目录开始路径。

我认为解决此问题的一种方法是将文件放在 src 目录中,然后使用 (hugsql/def-db-fns "q.sql")

于 2020-11-04T20:27:38.980 回答
0

Hugsql 需要相对于类路径上的目录的路径。(这与 Clojure 命名空间相同。)

因此,您的代码应如下所示:

(ns signupper.db (:require [hugsql.core :as hugsql]))

(hugsql/def-db-fns "signupper/db/sql/q.sql")

请参阅文档中的示例:https ://www.hugsql.org/#start-sql

于 2018-02-06T18:42:20.363 回答
0

我的经验 :

如果你的路径是这样的:

"/home/user/Desktop/sql/q.sql"

project.clj 必须是这样的 -->

:resource-paths ["/home/user/Desktop/sql" "other resources"]

和 core.clj -->

(hugsql/def-db-fns "q.sql")

但是如果你写在 core.clj

(hugsql/def-db-fns "/home/user/Desktop/sql/q.sql")

电脑是这样的:

"/home/user/Desktop/sql/home/user/Desktop/sql/q.sql"
于 2019-06-18T13:34:31.183 回答