nextjournal / clerk

⚡️ Moldable Live Programming for Clojure
https://clerk.vision
ISC License
1.82k stars 78 forks source link

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

Open licht1stein opened 1 month ago

licht1stein commented 1 month ago

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

image

borkdude commented 1 month ago

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

licht1stein commented 1 month ago

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 commented 1 month ago

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

licht1stein commented 1 month ago

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

borkdude commented 1 month ago

Thanks, I'll have a look!

borkdude commented 1 month ago

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

borkdude commented 1 month ago

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 commented 1 month ago

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 commented 1 month ago

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

borkdude commented 1 month ago

Why is reload/init in a vector?

licht1stein commented 1 month ago

It's a typo, sorry

borkdude commented 1 month ago

And the other question?

licht1stein commented 1 month ago

Omitting it doesn't change anything

licht1stein commented 1 month ago

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

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

(clerk/serve! {:browse? true})
licht1stein commented 1 month ago

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

borkdude commented 1 month ago

Thanks!

On Tue, Oct 22, 2024 at 11:44 PM Mykhaylo Bilyanskyy < @.***> wrote:

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

— Reply to this email directly, view it on GitHub https://github.com/nextjournal/clerk/issues/724#issuecomment-2430368754, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACFSBS2YOLK32N65RG2EPTZ43BKXAVCNFSM6AAAAABQMAXDGKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMZQGM3DQNZVGQ . You are receiving this because you commented.Message ID: @.***>

-- https://www.michielborkent.nl https://www.eetvoorjeleven.nu

borkdude commented 1 month ago

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 commented 1 month ago

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

licht1stein commented 1 month ago

Thank you!