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!

È stato utile?

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")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top