Проблема с использованием Redis-Clojure с Leiningen - PullRequest
4 голосов
/ 02 ноября 2010

Эй, я новичок в Clojure и Leiningen и немного застрял. Мне удалось настроить проект с Leiningen. Я могу собрать его в uberjar и запустить 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, и jar-файл redis-clojure доступен в моем каталоге lib. Я, наверное, упускаю что-то тривиальное, но я уже несколько часов занимаюсь этим вопросом и не могу приблизиться к решению. Спасибо!

Ответы [ 2 ]

8 голосов
/ 02 ноября 2010

Пространство имен redis не существует. Я полагаю, вам нужно

(:require [redis.core :as redis])

Способ проверки доступных пространств имен:

(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))
1 голос
/ 14 июня 2012

Это работает с более современными версиями Clojure, в этом примере он находит имена всех пространств имен, которые содержат подстроку "jdbc":

(map str
  (filter
    #(> (.indexOf (str %) "jdbc") -1)
    (all-ns)))

Результатом является последовательность, например:

=> 
("clojure.java.jdbc")
...