Problema utilizzando Redis-clojure con Leiningen
Domanda
Ciao, Sono nuovo di Clojure e Leiningen e un po 'bloccato. Sono riuscito a progetto una configurazione con Leiningen. Sono in grado di compilarlo in un uberjar ed eseguire il repl
. Sono anche riuscito a caricare una dipendenza di nome aleph
per eseguire un semplice server web concorrente.
Il passo successivo per me è quello di utilizzare redis-clojure
a Redis di accesso. Ma qui mi sono bloccato. Questo è il mio 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"]])
Ed ecco la mia core.clj
: Nota che ho solo aggiunto la (:requre redis)
linea secondo l'esempio da 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}))
Quando provo a fare funzionare lein repl
questo accade:
java.io.FileNotFoundException: Could not locate redis__init.class or redis.clj on classpath: (core.clj:1)
lein deps
Sì, ho eseguito e il barattolo Redis-clojure è disponibile nel mio elenco lib
. Probabilmente sto perdendo qualcosa di banale, ma sono stato a questo problema per un paio d'ore la società e non ottenere qualsiasi più vicino a una soluzione. Grazie!
Soluzione
Dominio Redis non esiste. Suppongo che è necessario
(:require [redis.core :as redis])
Un modo per verificare la presenza di spazi dei nomi disponibili:
(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))
Altri suggerimenti
Questo funziona con le versioni più attuali di Clojure, in questo esempio che trova i nomi di tutti gli spazi dei nomi che contiene la stringa sub "jdbc":
(map str
(filter
#(> (.indexOf (str %) "jdbc") -1)
(all-ns)))
Il risultato è una sequenza, nell'esempio:
=> ("clojure.java.jdbc")