Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No implementation of method: :has? of protocol: #'clojure.core.cache/CacheProtocol found for class: clojure.core.memoize.PluggableMemoization #724

Open
licht1stein opened this issue Oct 22, 2024 · 19 comments
Labels

Comments

@licht1stein
Copy link

Installed clerk to a project, and get this upon trying to run it. Both in repl and browser:

image

@borkdude
Copy link
Collaborator

@licht1stein Can you provide more details, perhaps a link if the project is open source or otherwise a repro?

@licht1stein
Copy link
Author

It's not public, but here's the full list of libraries used:

aero/aero                                   1.1.6     
babashka/fs                                 0.5.21    
buddy/buddy-auth                            3.0.1     
camel-snake-kebab/camel-snake-kebab         0.4.3     
clojure.java-time/clojure.java-time         1.4.2     
com.brunobonacci/mulog                      0.9.0     
com.brunobonacci/mulog-zipkin               0.9.0     
com.brunobonacci/where                      0.5.6     
com.cemerick/url                            0.1.1     
com.datomic/peer                            1.0.7075  
com.fbeyer/reitit-ring-defaults             0.1.0     
com.github.seancorfield/expectations        2.0.165   
com.github.seancorfield/honeysql            2.4.1045  
com.github.seancorfield/next.jdbc           1.3.874   
com.taoensso/nippy                          3.4.2     
djblue/portal                               0.57.3    
hashp/hashp                                 0.2.2     
hikari-cp/hikari-cp                         3.0.1     
http-kit/http-kit                           2.8.0     
integrant/integrant                         0.10.0    
integrant/repl                              0.3.3     
io.github.escherize/huff                    0.2.12    
io.github.matthewdowney/rich-comment-tests  v1.0.3    
io.github.nextjournal/clerk                 0.17.1102 
io.github.tonsky/clj-reload                 0.7.0     
jansi-clj/jansi-clj                         1.0.3     
jdbc-ring-session/jdbc-ring-session         1.5.2     
medley/medley                               1.4.0     
metosin/jsonista                            0.3.10    
metosin/reitit                              0.7.0     
metosin/reitit-interceptors                 0.7.2     
metosin/reitit-sieppari                     0.7.2     
migratus/migratus                           1.5.1     
mvxcvi/puget                                1.3.4     
org.clojars.abhinav/snitch                  0.1.15    
org.clojure/clojure                         1.12.0    
org.clojure/core.cache                      1.1.234   
org.clojure/spec.alpha                      0.5.238   
org.clojure/test.check                      1.1.1     
org.postgresql/postgresql                   42.6.0    
org.postgresql/postgresql                   42.7.3    
ring/ring-core                              1.12.2    
ring/ring-defaults                          0.5.0     
selmer/selmer                               1.12.61   
telegrambot-lib/telegrambot-lib             2.6.0     

And here's the content of deps.edn:

{:aliases  {:dev {:extra-paths ["development/src"]

                  :extra-deps {org.clojure/clojure {:mvn/version "1.12.0"}

                               my/site {:local/root "bases/site"}

                               my/config {:local/root "components/config"}
                               my/log {:local/root "components/log"}
                               my/postgres {:local/root "components/postgres"}
                               my/strings {:local/root "components/strings"}
                               my/server {:local/root "components/server"}
                               my/date-time {:local/root "components/date-time"}
                               my/middleware {:local/root "components/middleware"}
                               my/html {:local/root "components/html"}
                               my/effects {:local/root "components/effects"}
                               my/interceptors {:local/root "components/interceptors"}
                               my/sessions {:local/root "components/sessions"}
                               my/telegram {:local/root "components/telegram"}
                               my/db {:local/root "components/db"}
                               my/migrate {:local/root "components/migrate"}

                               my/users {:local/root "components/users"}
                               my/chats {:local/root "components/chats"}
                               my/seminars {:local/root "components/seminars"}
                               my/groups {:local/root "components/groups"}

                               io.github.nextjournal/clerk {:mvn/version "0.17.1102"}
                               io.github.tonsky/clj-reload {:mvn/version "0.7.0"}
                               integrant/repl {:mvn/version "0.3.3"}
                               djblue/portal {:mvn/version "0.57.3"}
                               hashp/hashp {:mvn/version "0.2.2"}
                               org.clojars.abhinav/snitch {:mvn/version "0.1.15"}}}
            :test {:extra-paths []}

            :storm {:classpath-overrides {org.clojure/clojure nil}
                    :extra-deps {com.github.flow-storm/clojure {:mvn/version "1.12.0"}
                                 com.github.flow-storm/flow-storm-dbg {:mvn/version "3.17.4"}}
                    :jvm-opts ["-Dflowstorm.startRecording=true"
                               "-Dclojure.storm.instrumentEnable=true"
                               "-Dflowstorm.title=UFY Storm"
                               #_
                               "-Dflowstorm.theme=dark"
                               "-Dclojure.storm.instrumentOnlyPrefixes=ufy"
                               "-Dclojure.storm.instrumentSkipPrefixes=ufy.log"
                               "-Dflowstorm.fileEditorCommand=emacsclient -n +<<LINE>>:0 <<FILE>>"
                               "-Dflowstorm.jarEditorCommand=emacsclient --eval '(let ((b (cider-find-file \"jar:file:<<JAR>>!/<<FILE>>\"))) (with-current-buffer b (switch-to-buffer b) (goto-char (point-min)) (forward-line (1- <<LINE>>))))'"]}

            :poly {:main-opts ["-m" "polylith.clj.core.poly-cli.core"]
                   :extra-deps {polylith/clj-poly {:mvn/version "0.2.19"}}}}}

@borkdude
Copy link
Collaborator

Is is possible to narrow down the error to a small notebook that you are allowed to share?

@licht1stein
Copy link
Author

This was not notebook related, the error is immediately shown upon launching clerk

@borkdude
Copy link
Collaborator

Thanks, I'll have a look!

@borkdude
Copy link
Collaborator

What do you mean with launching clerk? Do you mean running clerk/show!?

@borkdude
Copy link
Collaborator

Can you specify what aliases you used on startup?
I have to manually strip out all the my/... stuff because that doesn't exist.
With deps from the :dev alias I can't repro and this notebook is properly shown:

(ns foo
  (:require [nextjournal.clerk]))

(comment
  (nextjournal.clerk/serve! {})
  )

@licht1stein
Copy link
Author

licht1stein commented Oct 22, 2024

I can reproduce it using this deps.edn:

{:paths ["src"]
 :deps {aero/aero                                   {:mvn/version "1.1.6"}
        babashka/fs                                 {:mvn/version "0.5.21"}
        buddy/buddy-auth                            {:mvn/version "3.0.1"}
        camel-snake-kebab/camel-snake-kebab         {:mvn/version "0.4.3"}
        clojure.java-time/clojure.java-time         {:mvn/version "1.4.2"}
        com.brunobonacci/mulog                      {:mvn/version "0.9.0"}
        com.brunobonacci/mulog-zipkin               {:mvn/version "0.9.0"}
        com.brunobonacci/where                      {:mvn/version "0.5.6"}
        com.cemerick/url                            {:mvn/version "0.1.1"}
        com.datomic/peer                            {:mvn/version "1.0.7075"}
        com.fbeyer/reitit-ring-defaults             {:mvn/version "0.1.0"}
        com.github.seancorfield/expectations        {:mvn/version "2.0.165"}
        com.github.seancorfield/honeysql            {:mvn/version "2.4.1045"}
        com.github.seancorfield/next.jdbc           {:mvn/version "1.3.874"}
        com.taoensso/nippy                          {:mvn/version "3.4.2"}
        djblue/portal                               {:mvn/version "0.57.3"}
        hashp/hashp                                 {:mvn/version "0.2.2"}
        hikari-cp/hikari-cp                         {:mvn/version "3.0.1"}
        http-kit/http-kit                           {:mvn/version "2.8.0"}
        integrant/integrant                         {:mvn/version "0.10.0"}
        integrant/repl                              {:mvn/version "0.3.3"}
        io.github.escherize/huff                    {:mvn/version "0.2.12"}
        io.github.matthewdowney/rich-comment-tests  {:mvn/version "v1.0.3"}
        io.github.nextjournal/clerk                 {:mvn/version "0.17.1102"}
        io.github.tonsky/clj-reload                 {:mvn/version "0.7.0"}
        jansi-clj/jansi-clj                         {:mvn/version "1.0.3"}
        jdbc-ring-session/jdbc-ring-session         {:mvn/version "1.5.2"}
        medley/medley                               {:mvn/version "1.4.0"}
        metosin/jsonista                            {:mvn/version "0.3.10"}
        metosin/reitit                              {:mvn/version "0.7.0"}
        metosin/reitit-interceptors                 {:mvn/version "0.7.2"}
        metosin/reitit-sieppari                     {:mvn/version "0.7.2"}
        migratus/migratus                           {:mvn/version "1.5.1"}
        mvxcvi/puget                                {:mvn/version "1.3.4"}
        org.clojars.abhinav/snitch                  {:mvn/version "0.1.15"}
        org.clojure/clojure                         {:mvn/version "1.12.0"}
        org.clojure/core.cache                      {:mvn/version "1.1.234"}
        org.clojure/spec.alpha                      {:mvn/version "0.5.238"}
        org.clojure/test.check                      {:mvn/version "1.1.1"}
        org.postgresql/postgresql                   {:mvn/version "42.6.0"}
        ring/ring-core                              {:mvn/version "1.12.2"}
        ring/ring-defaults                          {:mvn/version "0.5.0"}
        selmer/selmer                               {:mvn/version "1.12.61"}
        telegrambot-lib/telegrambot-lib             {:mvn/version "2.6.0"}}}

And this user.clj:

(ns user
  (:require
    [clj-reload.core :as reload]
    [clojure.java.io :as io]
    [clojure.string :as str]
    [hashp.core]
    [integrant.core :as ig]
    [integrant.repl :as ir]
    [integrant.repl.state :as irs]
    [nextjournal.clerk :as clerk]
    [where.core :refer [where]]))

(clerk/serve! {#_#_:watch-paths ["bases" "components"] :browse? true})

@borkdude
Copy link
Collaborator

What happens if you omit (reload/init ...)?

@borkdude
Copy link
Collaborator

Why is reload/init in a vector?

@licht1stein
Copy link
Author

It's a typo, sorry

@borkdude
Copy link
Collaborator

And the other question?

@licht1stein
Copy link
Author

Omitting it doesn't change anything

@licht1stein
Copy link
Author

In fact, this user.clj also reproduces the error:

(ns user
  (:require
    [nextjournal.clerk :as clerk]))

(clerk/serve! {:browse? true})

@licht1stein
Copy link
Author

Here is a repo to reproduce it:
https://github.com/licht1stein/clerk-error

@borkdude
Copy link
Collaborator

borkdude commented Oct 22, 2024 via email

@borkdude
Copy link
Collaborator

borkdude commented Oct 24, 2024

An even shorter repro:

$ clj -Sdeps '{:deps {org.clojure/core.cache {:mvn/version "1.1.234"} org.clojure/tools.analyzer.jvm {:mvn/version "1.3.0"}}}'
Clojure 1.12.0
user=> (require '[clojure.tools.analyzer.jvm :as jvm])
nil
user=> (jvm/analyze-ns 'clojure.core.cache)
Execution error (IllegalArgumentException) at clojure.core.cache/eval4459$fn$G (REPL:1).
No implementation of method: :has? of protocol: #'clojure.core.cache/CacheProtocol found for class: clojure.core.memoize.PluggableMemoization

@borkdude
Copy link
Collaborator

I posted the above issue with tools.analyzer on Clojurians Slack (tools-analyzer channel) to see what they are saying about it.

@licht1stein
Copy link
Author

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants