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")

Другие вопросы по тегам