Hugsql не может прочитать мой файл sql
Я действительно потерян здесь. У меня очень простое приложение. Все, что он делает, это вставляет пользователя в таблицу пользователей в моей базе данных. Я использовал 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)
У кого-нибудь есть идеи?
Благодарю.
3 ответа
Ваш sql
каталог должен быть на пути. Пожалуйста, проверьте ваш project.clj
файл под resource-paths
и проверьте свой sql
каталог доступен по одному из указанных там путей.
Если нет, вы можете переместить sql
каталог или включить путь в resource-paths
запись.
Если вы используете 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}})
Hugsql ожидает путь относительно каталога на пути к классам. (Это то же самое, что пространства имен Clojure.)
Итак, ваш код должен выглядеть так:
(ns signupper.db (:require [hugsql.core :as hugsql]))
(hugsql/def-db-fns "signupper/db/sql/q.sql")
Смотрите пример в документации: https://www.hugsql.org/
Мой опыт:
Если ваш путь такой:
"/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"
Была такая же проблема.
Судя по всему, функция
def-db-fns
запускает путь из папки
src
а не корень проекта.
Я думаю, что один из способов решить эту проблему - поместить файл в каталог src и вызвать функцию с помощью(hugsql/def-db-fns "q.sql")