2014-04-21 11 views
5

Sono molto nuovo a Clojure e mi sto divertendo molto a giocare con esso. Una cosa che ho qualche problema è come leggere gli errori, personalmente penso che non siano molto descrittivi, ma probabilmente è dovuto alla mia "novità".Nessuna implementazione del metodo:: make-reader del protocollo: # 'clojure.java.io/IOFactory trovato per la classe: nil

Ad esempio, il problema che sto avendo ora è quando provo ad iniziare il mio assistente anello (posso fornire ulteriori dettagli se necessario):

Started server on port 3000 
java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil 
      core_deftype.clj:544 clojure.core/-cache-protocol-fn 
        io.clj:69 clojure.java.io/fn[fn] 
        io.clj:102 clojure.java.io/reader 
       RestFn.java:410 clojure.lang.RestFn.invoke 
      validator.clj:161 selmer.validator/validate-tags 
      validator.clj:175 selmer.validator/validate 
     template_parser.clj:155 selmer.template-parser/read-template 
     template_parser.clj:206 selmer.template-parser/preprocess-template 
       RestFn.java:410 clojure.lang.RestFn.invoke 
       parser.clj:211 selmer.parser/parse-file 
       parser.clj:234 selmer.parser/parse 
       RestFn.java:442 clojure.lang.RestFn.invoke 
       parser.clj:99 selmer.parser/render-file 
       RestFn.java:425 clojure.lang.RestFn.invoke 
       layout.clj:17 picture-gallery.views.layout/picture-gallery.views.layout.RenderablePage 
        core.clj:94 compojure.core/make-route[fn] 
        core.clj:40 compojure.core/if-route[fn] 
        core.clj:25 compojure.core/if-method[fn] 
        core.clj:107 compojure.core/routing[fn] 
       core.clj:2515 clojure.core/some 
        core.clj:107 compojure.core/routing 
       RestFn.java:139 clojure.lang.RestFn.applyTo 
        core.clj:626 clojure.core/apply 
        core.clj:112 compojure.core/routes[fn] 
        core.clj:107 compojure.core/routing[fn] 
       core.clj:2515 clojure.core/some 
        core.clj:107 compojure.core/routing 
       RestFn.java:139 clojure.lang.RestFn.applyTo 
        core.clj:626 clojure.core/apply 
        core.clj:112 compojure.core/routes[fn] 
      middleware.clj:44 noir.util.middleware/wrap-request-map[fn] 
     keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn] 
      nested_params.clj:70 ring.middleware.nested-params/wrap-nested-params[fn] 
       params.clj:58 ring.middleware.params/wrap-params[fn] 
      middleware.clj:12 hiccup.middleware/wrap-base-url[fn] 
     multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn] 
      middleware.clj:139 noir.util.middleware/wrap-access-rules[fn] 
      validation.clj:135 noir.validation/wrap-noir-validation[fn] 
       cookies.clj:66 noir.cookies/noir-cookies[fn] 
       cookies.clj:171 ring.middleware.cookies/wrap-cookies[fn] 
       session.clj:141 noir.session/noir-flash[fn] 
        flash.clj:31 ring.middleware.flash/wrap-flash[fn] 
       session.clj:96 noir.session/noir-session[fn] 
       session.clj:85 ring.middleware.session/wrap-session[fn] 
        Var.java:379 clojure.lang.Var.invoke 
       reload.clj:18 ring.middleware.reload/wrap-reload[fn] 
      stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn] 
      stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn] 
        jetty.clj:18 ring.adapter.jetty/proxy-handler[fn] 
       (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle 
     HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle 
       Server.java:363 org.eclipse.jetty.server.Server.handle 
    AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest 
    AbstractHttpConnection.java:920 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete 
    AbstractHttpConnection.java:982 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete 
      HttpParser.java:635 org.eclipse.jetty.http.HttpParser.parseNext 
      HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable 
    AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle 
SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle 
SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run 
    QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob 
    QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run 
       Thread.java:722 java.lang.Thread.run 

Questo è così oscuro per me, come si fa So esattamente cosa ho fatto di sbagliato? Non ricordo di aver avuto a che fare con "make-reader", protocolli o IOFactory.

risposta

8

Questa è una domanda difficile a cui rispondere senza molto contesto. Tuttavia sembra che tu stia cadendo fallo di http://dev.clojure.org/jira/browse/CLJ-1210 che sottolinea che questo messaggio di errore è decisamente inutile!

Si prega di guardare Clojure Clostache error - No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil che potrebbe essere un duplicato. Il lungo e il corto è che alcune risorse a cui ti riferisci non esistono. Di conseguenza, viene recuperato come "nullo", che si traduce quindi nel disturbo che si vede. Forse un caso in cui una biblioteca potrebbe lanciare un'eccezione per risorse non trovate (o almeno avere una variante di lancio delle eccezioni).

Uno dei modi in cui mi sono occupato di questo era guardare il codice sorgente del selmer, poiché questo è il primo pezzo non-clojure.core della traccia dello stack. Una delle prime cose che fa è ...

(defn validate-tags [template] 
    (with-open [rdr (reader template)] 

Da qui un po 'di deduzione e un po' veloce di googling mi ha fatto a quanto sopra.

[2017 update: L'errore inutile è stato infine fissato in Clojure 1.8, quindi speriamo che le persone non vedranno più questo problema!]

+1

Grazie mille! questo sicuramente mi ha aiutato ad andare nella giusta direzione. ho scoperto che avevo errato il percorso di un file in uno dei miei html: {% estende "picture_gallery/views/template/base.html"%} quando dovrebbe essere effettivamente "templates". Mi chiedo se il problema CLJ-1210 sia relativo a una versione più recente di Clojure. –

+0

Sembra che ci sia una patch collegata, quindi potrebbe fare la 1.7.0. – pete23

+1

@GustavoMatias Grazie mille per questo suggerimento. Ho avuto lo stesso strano errore, che ovviamente era dovuto a una struttura di progetto errata nella mia cartella delle risorse. – tareq

Problemi correlati