Problème d'utilisation Redis-clojure avec Leiningen
Question
Hé, je suis nouveau à Clojure et Leiningen et un peu coincé. J'ai réussi à mettre en place un projet avec Leiningen. Je suis en mesure de le compiler dans un uberjar et exécuter le repl
. J'ai aussi réussi à charger une dépendance appelée aleph
pour exécuter simple concurrent serveur web.
La prochaine étape pour moi est d'utiliser redis-clojure
pour Redis d'accès. Mais ici, je suis coincé. Ceci est mon 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"]])
Et voici mon core.clj
: Notez que je n'ajouté la ligne (:requre redis)
selon l'exemple 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}))
Quand je tente de lancer lein repl
cela se produit:
java.io.FileNotFoundException: Could not locate redis__init.class or redis.clj on classpath: (core.clj:1)
Oui, j'ai couru lein deps
et le pot-Redis Clojure est disponible dans mon répertoire lib
. Je suis probablement manque quelque chose de trivial, mais je suis à cette question pendant quelques heures maintenant et ne pas obtenir plus près d'une solution. Merci!
La solution
Namespace Redis n'existe pas. Je suppose que vous avez besoin
(:require [redis.core :as redis])
Une façon de vérifier les espaces de noms disponibles:
(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))
Autres conseils
Cela fonctionne avec les versions actuelles de plus Clojure, dans cet exemple, il trouve les noms de tous les espaces de noms qui contient la sous-chaîne « jdbc »:
(map str
(filter
#(> (.indexOf (str %) "jdbc") -1)
(all-ns)))
Le résultat est une séquence, dans l'exemple:
=> ("clojure.java.jdbc")