我真的迷失在这里。我有一个非常简单的应用程序。它只是将用户插入我的数据库中的用户表。我使用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)
任何人都有任何想法?
感谢。
答案 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")