مشكلة باستخدام redis-clojure مع Lininingen
سؤال
مرحبًا ، أنا جديد على Clojure و Lininingen وعلق بعض الشيء. لقد تمكنت من إعداد مشروع مع Lininingen. أنا قادر على تجميعه في 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
وجرة redis-clojure متوفرة في بلدي lib
الدليل. من المحتمل أن أفتقد شيئًا تافليًا ، لكنني كنت في هذه المشكلة لبضع ساعات الآن ولا أقترب من الحل. شكرًا!
المحلول
مساحة الاسم ريديس غير موجود. أفترض أنك بحاجة
(:require [redis.core :as redis])
طريقة للتحقق من مساحات الأسماء المتاحة:
(use 'clojure.contrib.find-namespaces)
(filter #(.startsWith (str %) "redis") (find-namespaces-on-classpath))
نصائح أخرى
يعمل هذا مع المزيد من الإصدارات الحالية من Clojure ، في هذا المثال ، يجد أسماء جميع مساحات الأسماء التي تحتوي على السلسلة الفرعية "JDBC":
(map str
(filter
#(> (.indexOf (str %) "jdbc") -1)
(all-ns)))
والنتيجة هي تسلسل ، على سبيل المثال:
=> ("clojure.java.jdbc")