Hugsql无法读取我的sql文件

时间:2018-02-06 09:07:14

标签: clojure luminus hugsql

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

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

在db.clj所在的direvtory中,我创建了一个名为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) 

任何人都有任何想法?

感谢。

5 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您使用的是Leiningen,则应将:resource-paths密钥下的sql文件夹添加到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}})

答案 2 :(得分: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

答案 3 :(得分: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"

答案 4 :(得分:0)

只是有同样的问题。

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

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