Проблема с использованием Redis-Clojure с Leinhen
Вопрос
Эй, я новичок в Clojure и Leinhen и немного застрял. Мне удалось настроить проект с Лейнингеном. Я могу компилировать его в уберижар и запустить repl
. Отказ Мне также удалось загрузить зависимость от имени aleph
Чтобы запустить простой параллельный веб-сервер.
Следующий шаг для меня - использовать redis-clojure
Доступ к Redis. Но вот я застрял. Это мое project.clj
:
(defproject alpha "0.0.1-SNAPSHOT"
:description "Just an alpha test script"
:main alpha.core
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[aleph, "0.1.2-SNAPSHOT"]
[redis-clojure "1.2.4"]])
И вот мой core.clj
: Обратите внимание, что я добавил только строку (:requre redis)
Согласно примеру от Redis-Clojure.
(ns alpha.core
(:require redis)
(:gen-class))
(use `aleph.core 'aleph.http)
(defn alpha [channel request]
(let [] (enqueue-and-close channel
{:status 200
:header {"Content-Type" "text/html"}
:body "Hello Clojure World!"}))
(println (str request)))
(defn -main [& args]
(start-http-server alpha {:port 9292}))
Когда я пытаюсь бежать lein repl
Это случилось:
java.io.FileNotFoundException: Could not locate redis__init.class or redis.clj on classpath: (core.clj:1)
Да, я бег lein deps
и банка Redis-Clojure доступна в моем lib
каталог. Я, наверное, скучаю по поводу чего-то тривиального, но я уже несколько часов был в этом вопросе, а не приблизился к решению. Спасибо!
Решение
Пространство имен редис не существует. Я полагаю, вам нужно
(:require [redis.core :as redis])
Способ проверки наличие доступных пространств имен:
(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))
Другие советы
Это работает с более современными версиями Clojure, в этом примере находит имена всех пространств имен, которые содержат подпункту «JDBC»:
(map str
(filter
#(> (.indexOf (str %) "jdbc") -1)
(all-ns)))
Результатом является последовательность, в примере:
=> ("clojure.java.jdbc")