Pregunta

Hola, soy nuevo en Clojure y Leiningen y un poco atascado. He conseguido un proyecto de instalación con Leiningen. Soy capaz de compilarlo en un uberjar y ejecutar el repl. También he conseguido cargar una dependencia llamada aleph ejecutar un simple servidor web concurrente.

El siguiente paso para mí es utilizar redis-clojure a Redis acceso. Pero aquí estoy atascado. Este es mi 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"]])

Y aquí está mi core.clj: Tenga en cuenta que sólo añadido el (:requre redis) línea de acuerdo con el ejemplo de 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}))

Cuando intento ejecutar lein repl esto sucede:

java.io.FileNotFoundException: Could not locate redis__init.class or redis.clj on classpath:  (core.clj:1)

Sí, he corrido lein deps y el frasco Redis-clojure está disponible en mi directorio lib. Probablemente estoy perdiendo algo trivial, pero he estado en este tema durante unas horas y no conseguir ahora más cerca de una solución. Gracias!

¿Fue útil?

Solución

Espacio de nombres Redis no existe. Supongo que usted necesita

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

Una forma de comprobar los espacios de nombres disponibles:

(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))

Otros consejos

Esto funciona con las versiones más actuales de Clojure, en este ejemplo se encuentra los nombres de todos los espacios de nombres que contiene la cadena de sub "JDBC":

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

El resultado es una secuencia, en el ejemplo:

=> 
("clojure.java.jdbc")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top