سؤال

مرحبًا ، أنا جديد على 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")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top