首页 > 解决方案 > ASDF 在太多目录中搜索库

问题描述

当我的应用程序尝试使用 连接到 sqlite DB 时mito:connect-toplevel,它需要很长时间,实际上,ASDF 正在递归扫描目录并扫描几个node_modules

但这只会发生在可执行文件上,而不是 Slime 上

这可能是我的环境的错,但我的 .sbclrc 中没有任何花哨的东西(不再)。

问题是,我已经观察到了这种行为asdf:system-relative-pathname,我在另一个应用程序中避免了这种行为,但现在这种情况发生在第三方库中。

我的models.connect:

(defun connect ()
  (format t "connecting to ~a...~&" *db-name*)
  (force-output)
  (setf *db* (connect-toplevel :sqlite3 :database-name *db-name*))
  (format t "...done~&")
  (force-output))

然后我构建一个可执行文件,我从目录中的命令行运行它~/projects/bookshops(不是~/bacasable我们在下面看到的)并在它忙碌时将其杀死:

connecting to db.db...
^CUnhandled SB-SYS:INTERACTIVE-INTERRUPT in thread #<SB-THREAD:THREAD
                                                "main thread" RUNNING
                                                    {1008E269A3}>:
Interactive interrupt at #x10002A6808.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1008E269A3}>
0: (SB-KERNEL:HAIRY-DATA-VECTOR-SET #<unavailable argument> #<unavailable argument> #<unavailable argument>) [tl,external]
1: (CONCATENATE SIMPLE-STRING "/" "home" "/" "vince" "/" "bacasable" "/" "testabelujo" "/" "abelujo" "/" "node_modules" "/" "testcafe-browser-tools" "/" "bin" "/" "linux" "/")
2: (SB-IMPL::UNPARSE-UNIX-NAMESTRING #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/bin/linux/")
3: (NAMESTRING #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/bin/linux/")
4: ((FLET ASDF/SOURCE-REGISTRY::PATHNAME-KEY :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/bin/linux/")
5: ((FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/bin/linux/")
6: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/bin/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
7: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/testcafe-browser-tools/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
8: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/testabelujo/abelujo/node_modules/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
9: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/testabelujo/abelujo/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
10: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/testabelujo/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
11: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES #P"/home/vince/bacasable/" #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::COLLECTP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1CB}> #<CLOSURE (FLET ASDF/SOURCE-REGISTRY::RECURSEP :IN ASDF/SOURCE-REGISTRY:COLLECT-SUB*DIRECTORIES-ASD-FILES) {100923C1FB}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100923C21B}>)
12: (ASDF/SOURCE-REGISTRY:COMPUTE-SOURCE-REGISTRY NIL #<HASH-TABLE :TEST EQUAL :COUNT 17 {10091B5463}>)
13: (ASDF/SOURCE-REGISTRY:ENSURE-SOURCE-REGISTRY NIL)
14: (ASDF/SYSTEM-REGISTRY:SYSDEF-SOURCE-REGISTRY-SEARCH "dbd-sqlite3")
15: ((FLET ASDF/SYSTEM-REGISTRY::TRY :IN ASDF/SYSTEM-REGISTRY:SEARCH-FOR-SYSTEM-DEFINITION) ASDF/SYSTEM-REGISTRY:SYSDEF-SOURCE-REGISTRY-SEARCH)
16: ((FLET ASDF/SYSTEM-REGISTRY::TRY :IN ASDF/SYSTEM-REGISTRY:SEARCH-FOR-SYSTEM-DEFINITION) ASDF/SYSTEM-REGISTRY:SYSDEF-SOURCE-REGISTRY-SEARCH) [external]
17: (SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1 #<CLOSURE (FLET ASDF/SYSTEM-REGISTRY::TRY :IN ASDF/SYSTEM-REGISTRY:SEARCH-FOR-SYSTEM-DEFINITION) {10091B480B}> (ASDF/PACKAGE-INFERRED-SYSTEM:SYSDEF-PACKAGE-INFERRED-SYSTEM-SEARCH ASDF/SYSTEM-REGISTRY:SYSDEF-CENTRAL-REGISTRY-SEARCH ASDF/SYSTEM-REGISTRY:SYSDEF-SOURCE-REGISTRY-SEARCH QUICKLISP-CLIENT:LOCAL-PROJECTS-SEARCHER QL-DIST:SYSTEM-DEFINITION-SEARCHER))
18: (ASDF/SYSTEM-REGISTRY:SEARCH-FOR-SYSTEM-DEFINITION "dbd-sqlite3")
19: ((LAMBDA NIL :IN ASDF/FIND-SYSTEM:LOCATE-SYSTEM))
20: ((LAMBDA NIL :IN ASDF/SYSTEM:FIND-SYSTEM))
21: (ASDF/SESSION:CONSULT-ASDF-CACHE (ASDF/SYSTEM:FIND-SYSTEM "dbd-sqlite3") #<CLOSURE (LAMBDA NIL :IN ASDF/SYSTEM:FIND-SYSTEM) {10091B387B}>)
22: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/SYSTEM:FIND-SYSTEM) {10091B387B}> :OVERRIDE NIL :KEY (ASDF/SYSTEM:FIND-SYSTEM "dbd-sqlite3") :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
23: ((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "dbd-sqlite3")
24: ((LAMBDA NIL :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY)) [external]
25: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) {10091B37DB}>)
26: (QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY #<unavailable argument>)
27: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "dbd-sqlite3" :PROMPT NIL)
28: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unavailable argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10091B301B}>) [fast-method]
29: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {10011057E3}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10091B301B}>) [fast-method]
30: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) #<unavailable argument> :PROMPT NIL :SILENT T :VERBOSE NIL) [fast-method]
31: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {100919ECDB}>)
32: (DBI::LOAD-DRIVER :SQLITE3)
33: (DBI:CONNECT :SQLITE3 :DATABASE-NAME "db.db")
34: (MITO.CONNECTION:CONNECT-TOPLEVEL :SQLITE3 :DATABASE-NAME "db.db")
35: (BOOKSHOPS.MODELS:CONNECT)
36: (BOOKSHOPS::INIT)
37: (BOOKSHOPS:MAIN)
38: ((LAMBDA NIL :IN UIOP/IMAGE:RESTORE-IMAGE))
39: (UIOP/IMAGE:CALL-WITH-FATAL-CONDITION-HANDLER #<CLOSURE (LAMBDA NIL :IN UIOP/IMAGE:RESTORE-IMAGE) {1008E3CD2B}>)
40: ((FLET #:WITHOUT-INTERRUPTS-BODY-89 :IN SAVE-LISP-AND-DIE))
41: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))

在我的环境中可能导致这种情况的原因是什么?

这是正常的 ASDF 这样做吗,为什么只使用可执行文件?

自卫队“3.3.1.2”

标签: common-lispasdf

解决方案


ASDF 正在从文件系统中的几个可能位置构建其源注册表:

  • ~/common-lisp/
  • ~/.local/share/common-lisp/source/
  • ~/.config/common-lisp/source-registry.conf和中的定义~/.config/common-lisp/source-registry.conf.d/
  • 还有更多……</li>

看:

我认为Quicklisp 添加了它的local-projects目录。

您需要查看这些列表以了解正在发生的事情。我猜您在某个地方将该~/bacasable/目录的符号链接放入了 ASDF 搜索的目录中。

顺便说一句,我发现库在运行时以编程方式下载所需的驱动程序有点问题。应该有办法解决这个问题。

也许您可以尝试在保存可执行文件之前强制加载驱动程序。


推荐阅读